加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8 – 使用对象和原始包装器进行流式处理

发布时间:2020-12-15 08:27:54 所属栏目:Java 来源:网络整理
导读:我正在使用 java 8流并尝试修改forEach终端操作中的对象内容. 我在这里面临的问题是我能够修改List Employee对象内容但不能修改List Integer的内容 代码段如下: public static void streamExample() { ListEmployee listEmp = Arrays.asList(new Employee()
我正在使用 java 8流并尝试修改forEach终端操作中的对象内容.

我在这里面临的问题是我能够修改List< Employee>对象内容但不能修改List< Integer>的内容

代码段如下:

public static void streamExample() {

    List<Employee> listEmp = Arrays.asList(new Employee());
    listEmp.stream().forEach(a -> a.setEmptName("John Doe"));
    listEmp.stream().forEach(System.out::println);
    List<Integer> listInteger = Arrays.asList(2,4,6,8,12,17,1234);
    listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a=a+1);
    listInteger.stream().forEach(System.out::println);

}

我想知道更改没有反映在列表中,因为在执行a = a 1操作时取消装箱整数对象但不确定.

解决方法

你没有使用Stream的最佳方法.请将Stream中的每个步骤视为修改已存在(或创建新)元素并将其返回到Stream.最后,您将收到最终结果,并且您可以使用最终方法之一来最终确定(并实际运行整个流)Stream:

List<Integer> listInteger = Arrays.asList(2,1234);
listInteger.stream().filter(v -> v % 2 == 0).forEach(a -> a = a + 1);
listInteger.stream().forEach(System.out::println);

这里有初始数组.你想做以下事情:

>过滤掉一些元素(这不是最后一步);
>打印过滤后的元素(这是最后一步).

为此,您不必两次创建Streams.使用一个:

Stream.of(2,1234)    // create stream (there're many way to do it)
      .filter(v -> v % 2 == 0)         // filter out required elements
      .map(v -> v + 1)                 // transform elements using given rule
      .forEach(System.out::println);   // finalize stream with printing out each element separately

注意:Stream.of(…)创建一个Stream,然后我们向流过滤器和map添加两个步骤,然后使用forEach完成或START创建流.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读