第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

通過匹配其他兩個列表中的條目來創(chuàng)建新的Java對象列表

通過匹配其他兩個列表中的條目來創(chuàng)建新的Java對象列表

躍然一笑 2021-05-05 13:16:29
假設我有這兩個清單List<Person> persons = Arrays.asList(                new Person(1, "Mike", "Canada"),                new Person(2, "Jill", "England"),                new Person(3, "Will", "Whales"),                new Person(4, "Mary", "Spain"));List<Metadata> metadata= Arrays.asList(                new metadata(1, "2000-01-01", "Naturalized", "Bachelor's of Arts"),                new metadata(2, "2001-01-01", "ExPat", "Masters of Chemestry"),                new metadata(3, "2017-05-01", "Citizen", "Buiness Management"),                new metadata(4, "2018-04-16", "Work Visa", "Nursing"));最終結(jié)果是一個新列表:List<PersonWithMetadata> personsAndMEtadata = Arrays.asList(                new PersonWithMetadata(1, "Mike", "Canada", "2000-01-01", "Naturalized", "Bachelor's of Arts"),                new PersonWithMetadata(2, "Jill", "England", "2001-01-01", "ExPat", "Masters of Chemestry"),                new PersonWithMetadata(3, "Will", "Whales", "2017-05-01", "Citizen", "Buiness Management"),                new PersonWithMetadata(4, "Mary", "Spain", "2018-04-16", "Work Visa", "Nursing"));我正在嘗試找到一種將前兩個列表組合成第三個列表的Java流方法-就像第一個輸入上的SQL連接是一個ID號一樣。似乎應該有一種方法可以做到這一點,但是我很茫然。這是怎么做的?另外,假設兩個輸入列表之間最多有一個匹配項。
查看完整描述

3 回答

?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

YCF_L的解決方案應該可以使用,但是它是O(n 2)解決方案。O(n)解決方案可以通過將一個列表轉(zhuǎn)換為從id到對象的映射,然后在另一個列表上進行迭代并從映射中獲取匹配值來實現(xiàn):


Map<Integer, Person> personMap = 

    persons.stream().collect(Collectors.toMap(Person::getId, Function.identity());


List<PersonWithMetadata> result = 

    metadata.stream()

            .map(m -> new PersonWithMetadata(personMap.get(m.getId()), m)

            .collect(Collectors.toList());

在示例數(shù)據(jù)中,列表具有匹配順序的匹配對象。如果此假設也適用于實際問題,則解決方案可能必須更簡單-您可以流式傳輸索引并從列表中獲取相應的值:


List<PersonWithMetadata> result = 

    IntStream.reange(0, persons.size())

             .map(i -> new PersonWithMetadata(persons.get(i), metadata.get(i))

             .collect(Collectors.toList());


查看完整回答
反對 回復 2021-05-26
?
幕布斯6054654

TA貢獻1876條經(jīng)驗 獲得超7個贊

您可以這樣嘗試:


List<PersonWithMetadata> personsAndMEtadata = persons.stream()

        .map(p -> {

                    //search for the meta data based on the person id

                    Metadata meta = metadata.stream()

                            .filter(m -> m.getId() == p.getId())

                            .findFirst()

                            .get();

                    // then create a PersonWithMetadata object based on Person and metadata

                    return new PersonWithMetadata(

                            p.getId(), p.getFirstName(), p.getLastName(),

                            meta.getDate(), meta.getCity(), meta.getJob()

                    );


                }

        ).collect(Collectors.toList());

關(guān)于這條線:


Metadata meta = metadata.stream().filter(m -> m.getId() == p.getId()).findFirst().get();

我假設您有一個id為person的元數(shù)據(jù),否則您將得到NullPointerException。


查看完整回答
反對 回復 2021-05-26
  • 3 回答
  • 0 關(guān)注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號