gpt4 book ai didi

Java lambda : combine doSomething() and removeIf() in one iteration

转载 作者:行者123 更新时间:2023-12-02 01:39:48 25 4
gpt4 key购买 nike

我想过滤一些元素并调用 stop() 函数,然后删除它们。这是示例代码:

items.stream().filter(x -> x.children.isEmpty()).forEach(x::stop);
items.removeIf(x -> x.children.isEmpty());

我们能否以 Java Stream 风格将这两个迭代合并为一个?

就像在一次迭代中执行某些操作然后 removeif() 一样。

最佳答案

您当前的代码已经通过 forEach() 产生了副作用,添加更多副作用不会使其变得更干净。

我宁愿以这种方式重写您的代码,而不是使用 peek() 或有状态 filter()

Map<Boolean, List<Item>> itemByIsEmpty = items.stream()
.collect(Collectors.partitioningBy(x -> x.getChildren().isEmpty()));

itemByIsEmpty.get(true).forEach(Item::stop);
List<Item> nonEmpty = itemByIsEmpty.get(false);

关于Java lambda : combine doSomething() and removeIf() in one iteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71795427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com