如何在Java8中使用reduce从对象列表创建字符串列表?

如何在Java8中使用reduce从对象列表创建字符串列表?,java,Java,我的目标如下: 类顺序{ 私有字符串码; 私有字符串状态; //构造函数、getter和setter等 } 我需要从满足条件的订单列表中创建一个代码列表。 我在JavaScript中实现了类似的功能,如下所示: const code=orders.reduce((代码列表,顺序)=>{ if(order.status==“NEW”)返回codeList.push(order.code) 返回代码表 }, []) 使用Java 8是否可以实现这一点?在Java中,您应该使用收集,而不是减少,用

我的目标如下:

类顺序{
私有字符串码;
私有字符串状态;
//构造函数、getter和setter等
}
我需要从满足条件的订单列表中创建一个代码列表。 我在JavaScript中实现了类似的功能,如下所示:

const code=orders.reduce((代码列表,顺序)=>{
if(order.status==“NEW”)返回codeList.push(order.code)
返回代码表
}, [])

使用Java 8是否可以实现这一点?

在Java中,您应该使用
收集
,而不是
减少
,用于此目的:

List<String> codes =
    orders.stream()
          .filter(o -> o.getStatus().equals("NEW"))
          .map(Order::getCode)
          .collect(Collectors.toList());
列出代码=
orders.stream()
.filter(o->o.getStatus().equals(“新”))
.map(订单::getCode)
.collect(Collectors.toList());

Reduce用于单个结果中的聚合值(例如,平均值或总和)。 Collect用于集合中的聚合值

Java8流通常比在集合上处理更高效,因为它们只处理您需要的内容,还允许您在必要时进行并行化


再见

我这么做了,但这样做有效吗?我的意思是,就我而言,对于这个实现,我将对数组进行两次检查,但是对于JS实现,只进行了一次。是的,它是有效的。不,这并不是“重复”列表两次。这是一条小溪。输入列表迭代一次。