gpt4 book ai didi

java - 使用 Java 8 的 Streams 和 Lambdas 表达式迭代集合

转载 作者:行者123 更新时间:2023-11-30 07:02:51 25 4
gpt4 key购买 nike

我开始学习 Java 8 流和 lambda 表达式。我想迭代一个集合,但出现编译错误。我明白为什么会发生这个错误,但我不知道如何摆脱它。代码下方:

 List<TT021OrderDetails> entitiesList =BeanAdapter.getInstance().transformToEntityList(
TT021OrderDetails.class, positionsList);

entitiesList=(CollectionUtils.isNotEmpty(entitiesList))?entitiesList.stream().forEach(orderDetail->orderDetail.setOrderHeader(entity)):null;

所以我需要的是迭代集合entitiesList(如果它不为null),并且我想为每个实体设置对象的一个​​属性的值,然后返回已经填充的集合。

好吧,我想使用 Java 8 的新 API 来做到这一点,但我收到一个编译错误,提示“类型不兼容,需要列表,发现无效”,这基本上是在告诉我 forEach 的终端方法没有返回任何东西,但是它期望返回句子中声明的列表。

如果 forEach 方法返回 void,如何迭代列表并返回已填充的列表?知道如何解决这个问题,或者其他方法吗? (当然除了典型的 for(TT021OrderDetails orderDetail:entitiesList ){...} )

非常感谢您

最佳答案

您可以使用 peek 而不是 forEach 并使用 collect 作为终端操作来获取列表:

entitiesList=(CollectionUtils.isNotEmpty(entitiesList))?entitiesList.stream().peek(orderDetail->orderDetail.setOrderHeader(entity)).collect(Collectors.toList()):null;

但是,由于您没有更改列表(您只是遍历 entitiesList 并为每个元素调用一个方法),因此不需要整个分配。

随便写:

if (entitiesList != null) {
entitiesList.forEach(orderDetail->orderDetail.setOrderHeader(entity));
}

您甚至不需要 Stream。

关于java - 使用 Java 8 的 Streams 和 Lambdas 表达式迭代集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810162/

25 4 0