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

2022-08-31 09:20:12

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

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

在普通的Java中,它就像

for(String str : strList){
   intList.add(Integer.valueOf(str));
}

但是我如何用lambda实现相同的目标,给定一个要转换为整数数组的字符串数组。


答案 1
List<Integer> intList = strList.stream()
                               .map(Integer::valueOf)
                               .collect(Collectors.toList());

答案 2

您可以创建帮助器方法,这些方法将使用上的映射操作将类型的列表(数组)转换为类型的列表(数组)。TU

//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)