至于现在我在做什么:
Map<Integer, Item> itemList = getItems(input);
Iterator<Item> ItemIterator = input.getItems().iterator();
List<Item> updatedItems = Lists.newLinkedList();
for (int i = MIN; i <= input.getInputReq().getList().size(); i++) {
Item item = itemList.get(i);
if (item != null) {
item.setFlag(false);
item.setId(getId());
updatedItems.add(item);
itemList.remove(i);
} else {
if (ItemIterator.hasNext()) {
updatedItems.add(ItemIterator.next());
}
}
}
在java8中使用Streams和lambda有什么有效的方法吗?
答案 0 :(得分:1)
这是一个答案(不确定它是否正确),但几乎和你的问题一样模糊:
int size = input.getInputReq().getList();
List<Item> updatedItems = IntStream.range(0, size)
.mapToObj(i -> itemList.get(i) )
.map(e ->
{
return Optional.of(e).map(i -> {
i.setFlag(false);
i.setId(getId());
return i;
}).orElse(ItemIterator.next());
}).collect(Collectors.toList());
答案 1 :(得分:0)
在您的情况下,我会写一个单独的方法来执行更新并将项目放在updatedItems集合中:
private void updateItemsAndPutThemInList(Item item){
item.setFlag(false);
setId(getId());
updatedItems.add(item);
}
然后使用以下代码处理它们:
input.getItems().stream().filter(i -> i != null).forEach(i -> updateItemsAndPutThemInList(i));
根据代码的用途,您可以指定更新项目必须作为私有方法的参数的列表,其签名将是:
private void updateItemsAndPutThemInList(Item item, List<Item> updatedItems)
并且需要forEach-method才能将此引用(必须是最终的!)引用到此列表中。