我开始学习Java 8流和lambdas表达式。 我想迭代一个集合,但我得到一个编译错误。我理解为什么会发生这个错误,但我不知道如何摆脱它。代码下方:
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做到这一点,但我收到一个编译错误,说“不兼容的类型,必需的List,发现无效”,这基本上告诉我终端方法forEach不返回什么,但它期望返回句子中声明的List。
如果forEach方法返回void,如何迭代列表并返回已填充的列表? 任何想法如何解决这个问题,或者其他方式如何解决这个问题? (当然除了典型的(TT021OrderDetails orderDetail:entitiesList){...})
非常感谢您提前
答案 0 :(得分:4)
您可以使用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。
答案 1 :(得分:0)
newList = yourList.stream().map(o -> {do whatever you want}).collect(Collectors.toList());
答案 2 :(得分:0)
每次返回无效。您可以简单地遍历流,而无需将结果分配给列表。
if (CollectionUtils.isNotEmpty(entitiesList)){
entitiesList.stream().forEach(orderDetail->orderDetail.setOrderHeader(entity))
}
JDK8 forEach教程:
http://www.adam-bien.com/roller/abien/entry/java_8_from_a_for