【发布时间】:2021-12-23 00:31:03
【问题描述】:
在下面的练习中,我应该保留所有包含 SmartLamps 的房间。我怎样才能用流解决这个问题?由于每个 SmartLamp 都有属性 Room,我需要流过房间和灯。我试图用 anyMatch 来做,但找不到可行的解决方案。有人可以帮忙吗? (我知道如何在没有流的情况下解决它)
public class SmartHome {
private final List<Room> rooms;
private final List<SmartLamp> lamps;
public void deleteRooms() {
rooms.stream().anyMatch(lamps.stream().map(SmartLamp::getRoom));
}
}
代码给出错误: “类型不匹配:无法从 Stream 转换为 Predicate”
【问题讨论】:
-
Collections likeLists 有一个方法removeIf -
另外,Stream.filter 允许您仅将匹配谓词的元素传递给管道中的下一个操作。
-
您可以使用
.stream()过滤掉坏房间(.filter())。之后,您可以收集房间并将其分配给您的this.rooms。
标签: java functional-programming