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

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

在對象列表中查找元素的最大大小

在對象列表中查找元素的最大大小

aluckdog 2021-06-07 17:31:56
@Dataclass Person {    private String fname;    private String lname;    private List<String> friends;    private List<BigDecimal> ratings;    ...}@Dataclass People {    private List<Person> people;    ...}假設我有上述課程,并且需要弄清楚一個人擁有的最多朋友數量是多少。我知道 pre-streams 的做法......通過循環列表中的每個元素并檢查friends.size() 是否大于當前存儲的最長列表的數量。有沒有辦法用流簡化代碼?像這個答案?
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

根據依賴于 的大小的比較器計算Person包含的最大值:PeoplePerson.getFriends()


Optional<Person> p = people.getPeople()

                           .stream()

                           .max(Comparator.comparingInt(p -> p.getFriends()

                                                           .size()));

請注意,您還可以僅檢索不與 Person 關聯的朋友的最大數量:


OptionalInt maxFriends = people.getPeople()

                               .stream()

                               .mapToInt(p -> p.getFriends()

                                               .size())

                               .max();



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

TA貢獻1876條經驗 獲得超7個贊

您可以在Person類中聲明以下方法:


public int getNumberOfFriends(){

   return friends.size();

}

然后在這樣的流中使用它:


Optional <Person> personWithMostFriends = people.stream().max(Comparator.comparingInt(Person::getNumberOfFriends));

通過這種方法,您將獲得Person最多朋友的對象,而不僅僅是某人建議的最大朋友數。


查看完整回答
反對 回復 2021-06-10
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

你的問題已經回答了。但我添加這個是為了一件事。如果您的人員列表很大,并且您有多核電腦并且您想有效地使用它,那么請使用parallelstream()。


得到人:


Person person = people.getPeople()

.parallelStream()

.max(Comparator.comparingInt(p-> p.getFriends().size()))

.orElse(null);

獲取尺寸:


int size = people.getPeople()

.parallelStream()

.mapToInt(p -> p.getFriends().size())

.max().orElse(0);


查看完整回答
反對 回復 2021-06-10
  • 3 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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