将传统for循环重写为streams.map java 8

将传统for循环重写为streams.map java 8,java,java-8,java-stream,Java,Java 8,Java Stream,我正在尝试测试RESTAPI PUT请求。这是一个spring引导应用程序。 PUT请求用于在现有对象列表中执行更新 传统的写作方式正在发挥作用 数据是内存中的数据,它是一个列表和 名称字符串类型是在数据中查找对象的键,而objectBean是一个在我们找到该对象后将其替换为名称的键 但我尝试用Java8中的Stream编写。下面是代码 Data.stream.mapp->p.getName.equalsname?对象bean:p 但这个列表是空的 鉴于数据是包含Bean对象的列表,您需要返回收

我正在尝试测试RESTAPI PUT请求。这是一个spring引导应用程序。 PUT请求用于在现有对象列表中执行更新

传统的写作方式正在发挥作用

数据是内存中的数据,它是一个列表和 名称字符串类型是在数据中查找对象的键,而objectBean是一个在我们找到该对象后将其替换为名称的键

但我尝试用Java8中的Stream编写。下面是代码

Data.stream.mapp->p.getName.equalsname?对象bean:p

但这个列表是空的

鉴于数据是包含Bean对象的列表,您需要返回收集的流:

return data.stream()
  .map(bean -> bean.getName().equals(name) ? objectBean : bean)
  .collect(Collectors.toList());
如果数据是非空的Iterable,那么输出必须与map接受函数对象一样。但是,对于流API来说,这不是一个好的用例:

首先,流是为无副作用的目的而设计的,即创建新的数据结构而不是更新它们。stream API支持forEachConsumer,它是为副作用而设计的,但许多其他集合也是如此,事实上,所有的Iterables都是如此,而map和flatMap等不可变操作则不是

第二,我看不到程序的其余部分,但至少在这段代码中,您似乎在根据名称更新数据结构,并且您假设名称是唯一的,因为您在使用您要查找的第一个Bean时就停止了。考虑使用MAP作为数据结构。< /P> 最后,流是惰性数据结构,这意味着所有链式操作都是在收集数据时计算出来的。这提供了将大量计算链接在一起的动机-仅链接一个映射不会给您带来任何性能优势,但它确实会给您提供参考透明度。

鉴于数据是一些带有Bean对象的列表,您需要返回收集的流:

return data.stream()
  .map(bean -> bean.getName().equals(name) ? objectBean : bean)
  .collect(Collectors.toList());
return data.stream()
    .filter(bean -> bean.getName().equals(name))
    .findAny()
如果数据是非空的Iterable,那么输出必须与map接受函数对象一样。但是,对于流API来说,这不是一个好的用例:

首先,流是为无副作用的目的而设计的,即创建新的数据结构而不是更新它们。stream API支持forEachConsumer,它是为副作用而设计的,但许多其他集合也是如此,事实上,所有的Iterables都是如此,而map和flatMap等不可变操作则不是

第二,我看不到程序的其余部分,但至少在这段代码中,您似乎在根据名称更新数据结构,并且您假设名称是唯一的,因为您在使用您要查找的第一个Bean时就停止了。考虑使用MAP作为数据结构。< /P> 最后,流是惰性数据结构,这意味着所有链式操作都是在收集数据时计算出来的。这提供了将大量计算链接在一起的动机-仅链接一个映射不会给您带来任何性能优势,但它会给您提供参考透明度。

在此处使用流只会使代码更加复杂

return data.stream()
    .filter(bean -> bean.getName().equals(name))
    .findAny()
如果你真的想要,你可以引入它来找到索引i的值。之后,您可以进行更换

IntStream.range0,data.size .filteri->data.geti.getName.equalsname.findFirst .ifPresenti->data.seti,objectBean; 在这里使用流只会使代码更加复杂

如果你真的想要,你可以引入它来找到索引i的值。之后,您可以进行更换

IntStream.range0,data.size .filteri->data.geti.getName.equalsname.findFirst .ifPresenti->data.seti,objectBean;
此代码在数据中查找特定对象,对其进行修改并退出。这不是一个很好的用例…有没有其他方法可以使用Java8特性来实现这一点?与传统的数据更新方式不同的是,语法糖并不会给您带来多少好处。这就是说,这看起来应该是一个映射。什么是数据?@Goo你是说data.addi,objectBean吗?这段代码在数据中查找特定对象,修改它并退出。这不是一个很好的用例…有没有其他方法可以使用Java8特性来实现这一点?与传统的数据更新方式不同的是,语法糖并不会给您带来多少好处。这就是说,这看起来应该是一张地图。什么是数据?@Goo你是说data.addi,objectBean?你不需要花括号,.ifPresenti->data.seti,objectBean;你不需要花括号,.ifPresenti->data.seti,objectBean;行