首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于将数组/字符串列表转换为整数数组/列表的Lambda表达式

用于将数组/字符串列表转换为整数数组/列表的Lambda表达式
EN

Stack Overflow用户
提问于 2014-04-14 18:17:14
回答 8查看 196.6K关注 0票数 113

由于Java 8附带了强大的lambda表达式,

我想写一个函数来将字符串的列表/数组转换为整数、浮点数、双精度数等的数组/列表。

在普通的Java中,它就像这样简单

代码语言:javascript
复制
for(String str : strList){
   intList.add(Integer.valueOf(str));
}

但是,如何使用lambda实现相同的功能,给定要转换为整数数组的字符串数组。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-04-14 18:26:19

您可以创建帮助器方法,使用map操作将T类型的列表(数组)转换为U类型的列表(数组)。

代码语言:javascript
复制
//for lists
public static <T, U> List<U> convertList(List<T> from, Function<T, U> func) {
    return from.stream().map(func).collect(Collectors.toList());
}

//for arrays
public static <T, U> U[] convertArray(T[] from, 
                                      Function<T, U> func, 
                                      IntFunction<U[]> generator) {
    return Arrays.stream(from).map(func).toArray(generator);
}

并像这样使用它:

代码语言:javascript
复制
//for lists
List<String> stringList = Arrays.asList("1","2","3");
List<Integer> integerList = convertList(stringList, s -> Integer.parseInt(s));

//for arrays
String[] stringArr = {"1","2","3"};
Double[] doubleArr = convertArray(stringArr, Double::parseDouble, Double[]::new);

请注意,s -> Integer.parseInt(s)可以替换为Integer::parseInt (请参阅Method references)

票数 132
EN

Stack Overflow用户

发布于 2014-08-31 02:05:18

代码语言:javascript
复制
List<Integer> intList = strList.stream()
                               .map(Integer::valueOf)
                               .collect(Collectors.toList());
票数 138
EN

Stack Overflow用户

发布于 2016-08-20 15:35:28

不需要接受答案中的辅助方法。Streams可以与lambda一起使用,或者通常使用Method References来缩写。Streams支持功能操作。map()转换元素,然后collect(...)toArray()将流包装回一个数组或集合。

Venkat Subramaniam's talk (video)比我解释得更好。

1将List<String>转换为List<Integer>

代码语言:javascript
复制
List<String> l1 = Arrays.asList("1", "2", "3");
List<Integer> r1 = l1.stream().map(Integer::parseInt).collect(Collectors.toList());

// the longer full lambda version:
List<Integer> r1 = l1.stream().map(s -> Integer.parseInt(s)).collect(Collectors.toList());

2将List<String>转换为int[]

代码语言:javascript
复制
int[] r2 = l1.stream().mapToInt(Integer::parseInt).toArray();

3将String[]转换为List<Integer>

代码语言:javascript
复制
String[] a1 = {"4", "5", "6"};
List<Integer> r3 = Stream.of(a1).map(Integer::parseInt).collect(Collectors.toList());

4将String[]转换为int[]

代码语言:javascript
复制
int[] r4 = Stream.of(a1).mapToInt(Integer::parseInt).toArray();

5将String[]转换为List<Double>

代码语言:javascript
复制
List<Double> r5 = Stream.of(a1).map(Double::parseDouble).collect(Collectors.toList());

6(奖励)将int[]转换为String[]

代码语言:javascript
复制
int[] a2 = {7, 8, 9};
String[] r6 = Arrays.stream(a2).mapToObj(Integer::toString).toArray(String[]::new);

当然,更多的变化是可能的。

另请参阅Ideone version of these examples。可以单击fork,然后单击run在浏览器中运行。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23057549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档