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

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

如何根據(jù)嵌套對象的多次比較進(jìn)行流排序?

如何根據(jù)嵌套對象的多次比較進(jìn)行流排序?

海綿寶寶撒 2023-10-13 14:50:37
型號示例:我需要根據(jù)駕駛員的性別和年齡對汽車流進(jìn)行排序。public class Car {    String color;    Driver driver; }public class Driver {    String name;    Integer age;    String gender;  }public List<Car> sortCars(List<Car> cars) {    return cars.stream()        .sorted(Comparator                .comparing(car -> -1 /* car.getDriver().getGender() */ )                .thenComparing(car -> -1 /* car.getDriver().getAge() */ ))        .collect(Collectors.toList());}我不想創(chuàng)建特殊的比較器類或?qū)崿F(xiàn)比較器接口。我的用例可能嗎?過去一個小時我一直在瀏覽 SO,但沒有一個答案有效。
查看完整描述

2 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊

可能類型推斷不夠強(qiáng)大。這對我有用:

return cars.stream()
        .sorted(Comparator.comparing(car -> ((Car) car).getDriver().getGender())
                .thenComparingInt(car -> ((Car) car).getDriver().getAge()))
        .collect(Collectors.toList());


查看完整回答
反對 回復(fù) 2023-10-13
?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊

如果你想避免強(qiáng)制轉(zhuǎn)換,你還有兩個選擇:

選項1:

 Comparator<Car> com1 = Comparator.comparing(car -> car.getDriver().getGender());
 Comparator<Car> com2 = Comparator.comparing(car -> car.getDriver().getAge());

然后:

cars.stream().sorted(com1.thenComparing(com2)).collect(Collectors.toList());

選項2:

讓編譯器知道您正在比較Cars:

cars.stream().sorted(Comparator.comparing((Car car) -> car.getDriver().getGender())
    .thenComparing(car -> car.getDriver().getAge()))
                    .collect(Collectors.toList());

編輯:實際上,您還有更多選擇。根據(jù) @Andreas 的評論,您可以傳遞類型Comparator.<Car, String>comparing,也可以編寫自己的comparing函數(shù),如下所示:

sorted((car1, car2) -> {/*function body that returns -1, 0, 1 */}

另外,如果你想List<Car>排序,可以直接使用sort()方法:

cars.sort(com1.thenComparing(com2));


查看完整回答
反對 回復(fù) 2023-10-13
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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