Lambda 表达式将 array/List of String 转换为 array/List of Integers

由于 Java 8提供了强大的 lambda 表达式,

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

在普通 Java 中,它的简单程度如下

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

但是,如何使用 lambda 实现同样的目标,因为它给定了一个字符串数组来转换为一个整数数组。

210248 次浏览

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

//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(参见 Method references)

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

编辑: 正如评论中指出的那样,这是一个简单得多的版本: Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray() 这样,我们就可以跳过与列表的整个转换过程。


我找到了另一个单行解决方案,但它仍然相当慢(需要大约100倍的时间比周期测试的数组6000的)

String[] stringArray = ...
int[] out= Arrays.asList(stringArray).stream().map(Integer::parseInt).mapToInt(i->i).toArray();

用途:

  1. AsList ()将数组转换为 List
  2. Stream 将其转换为 Stream (需要执行映射)
  3. Map (Integer: : parseInt)将流中的所有元素转换为 Integers
  4. . mapToInt (i-> i)将所有整数转换为整数(如果只想要整数,则不必这样做)
  5. .toArray() converts the Stream back to an array

另外-当字符串数组没有元素时控制:

Arrays.stream(from).filter(t -> (t != null)&&!("".equals(t))).map(func).toArray(generator)

你也可以用,

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");


Integer[] array = list.stream()
.map( v -> Integer.valueOf(v))
.toArray(Integer[]::new);

名单:

List<Integer> intList
= stringList.stream().map(Integer::valueOf).collect(Collectors.toList());

数组:

int[] intArray = Arrays.stream(stringArray).mapToInt(Integer::valueOf).toArray();

Arrays.toString(int []) works for me.

I didn't find it in the previous answers, so, with Java 8 and streams:

Convert String[] to Integer[]:

Arrays.stream(stringArray).map(Integer::valueOf).toArray(Integer[]::new)

我使用 maptoInt ()和 Lambda 操作将 string 转换为 Integer

int[] arr = Arrays.stream(stringArray).mapToInt(item -> Integer.parseInt(item)).toArray();