Answers:
您可以创建辅助方法,该方法使用上的操作T
将类型的列表(数组)转换为类型的列表(数组)。U
map
stream
//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);
}
并像这样使用它:
//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
(请参阅方法参考)
List<Integer> intList = strList.stream()
.map(Integer::valueOf)
.collect(Collectors.toList());
不需要接受的答案中的帮助方法。流可以与lambda一起使用,或者通常使用Method References缩短。流启用功能操作。map()
转换元素和/ collect(...)
或toArray()
将流包装回数组或集合中。
Venkat Subramaniam的讲话(视频)比我解释得更好。
1转换List<String>
成List<Integer>
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[]
int[] r2 = l1.stream().mapToInt(Integer::parseInt).toArray();
3转换String[]
为List<Integer>
String[] a1 = {"4", "5", "6"};
List<Integer> r3 = Stream.of(a1).map(Integer::parseInt).collect(Collectors.toList());
4转换String[]
成int[]
int[] r4 = Stream.of(a1).mapToInt(Integer::parseInt).toArray();
5转换String[]
为List<Double>
List<Double> r5 = Stream.of(a1).map(Double::parseDouble).collect(Collectors.toList());
6(奖金)转换int[]
为String[]
int[] a2 = {7, 8, 9};
String[] r6 = Arrays.stream(a2).mapToObj(Integer::toString).toArray(String[]::new);
当然,可能会有更多变化。
另请参见这些示例的Ideone版本。可以单击fork,然后运行以在浏览器中运行。
编辑:正如评论中指出的,这是一个简单得多的版本:
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
这样,我们可以跳过与列表的整个转换。
我找到了另一种单行解决方案,但是它仍然很慢(花费比a周期长大约100倍-在6000 0的数组上测试)
String[] stringArray = ...
int[] out= Arrays.asList(stringArray).stream().map(Integer::parseInt).mapToInt(i->i).toArray();
这是做什么的:
Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray()
对于列表:
List<Integer> intList
= stringList.stream().map(Integer::valueOf).collect(Collectors.toList());
对于数组:
int[] intArray = Arrays.stream(stringArray).mapToInt(Integer::valueOf).toArray();
Lists.transform()
。