假设我有一个名为 的对象House,其中包含List<Room>:public class House {private List<Room> roomsList;public House(List<Room> rooms) { roomsList = rooms;}/*Getter and Setter*/...对于 Room,只是一个属性color,其值由 表示int:public calss Room {private int color;public Room(int c) { color = c;}/*Getter and Setter*/...现在,使用 Java 8,并给定一个已设置的对象House,我知道如何根据 的值在 my 中List<Room>查找对象,例如:RoomHousecolorRoom myRoom = house.getRooms.stream().filter(r -> r.getColor() == color).findFirst().orElse(null);我希望能够做的是,给定 aList<House>和值为int c,找到一个或多个属性等于Housea的Roomcolorc需要明确的是,对于我的用例:theList<House>既不为 null,也不为空;everyHouse都有一个List<Room>既不为 null 也不为空的 a;每个Room都有其属性color集;每个Room里面House都有独特的颜色最有可能(但不一定)只有 1 个具有给定Housea的Roomcolor我可以做这样的事情:List<House> houseList = /*a given list of houses*/int c = 4;House myHouse = null;for (House house : houseList) { List<Room> rooms = house.getRooms(); Room roomOfRightColor = house.getRooms.stream().filter(r -> r.getColor() == color).findFirst().orElse(null); if (room != null) { myHouse = house; break; }if (myHouse == null) {/*Handle null*/}return myHouse;但也许有一种更聪明和/或更直接的方法来做到这一点?
1 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
我可以想象以前也有人问过类似的问题,技巧就在于下一个过滤操作:
private static Optional<House> test() {
List<House> houseList = Arrays.asList(
new House(new Room(1), new Room(3)),
new House(new Room(5))
);
int color = 5;
return houseList.stream()
.filter(h -> h.getRooms()
.stream()
.anyMatch(r -> r.getColor() == color))
.findFirst();
}
因此,在过滤器内部,您有第二个匹配项来检查内部列表。我确实将其更改为返回可选值而不是空值,但请随意应用适合您的内容。
添加回答
举报
0/150
提交
取消