为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只斗牛犬 2019-12-21 12:33:20
由于Java 8带有强大的lambda表达式,我想编写一个函数,将字符串的列表/数组转换为整数,浮点数,双打等的数组/列表。在普通的Java中,它就像for(String str : strList){   intList.add(Integer.valueOf(str));}但是在给定要转换为整数数组的字符串数组的情况下,如何使用lambda实现相同的功能。
查看完整描述

3 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

您可以创建辅助方法,该方法将使用上的操作T将类型的列表(数组)转换为类型的列表(数组)。Umapstream


//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(请参阅方法参考)


查看完整回答
反对 回复 2019-12-21
?
MMTTMM

TA贡献1869条经验 获得超4个赞

List<Integer> intList = strList.stream()

                               .map(Integer::valueOf)

                               .collect(Collectors.toList());


查看完整回答
反对 回复 2019-12-21
?
智慧大石

TA贡献1946条经验 获得超3个赞

不需要接受的答案中的帮助方法。流可以与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,然后运行以在浏览器中运行。


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 1 关注
  • 5129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信