亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據其成員屬性之一在對象列表中查找對象

根據其成員屬性之一在對象列表中查找對象

FFIVE 2023-07-28 09:31:04
假設我有一個名為 的對象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();

}

因此,在過濾器內部,您有第二個匹配項來檢查內部列表。我確實將其更改為返回可選值而不是空值,但請隨意應用適合您的內容。


查看完整回答
反對 回復 2023-07-28
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號