假設我有一個名為 的對象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
提交
取消