gpt4 book ai didi

Java 8 Stream,如何获得 Top N 计数?

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:28 25 4
gpt4 key购买 nike

<分区>

我需要您的建议来简化下面的代码。我有一个玩家列表,其中包含获胜游戏的 ID。我想从这个列表中提取 2 名最佳球员(这 2 名球员拥有更多比赛 ID)提取后,我必须返回初始列表才能执行其他操作。我认为可以在优化或阅读方面改进这段代码。如果你能帮助我。

public class PlayerStatistics {
int id
String name;
int idMatchWon; // key from Match

// getter , setter
}

public static void main(String[] args) throws Exception {

List<PlayerStatistics> _players = new ArrayList<PlayerStatistics>();

_players.add(initialize(1,'John',4));
_players.add(initialize(2,'Teddy',2));
_players.add(initialize(3,'Kevin',3));

// How to get Top 2
List<PlayerStatistics> _top2Players = extractTop2Players(_players);
}

private List<PlayerStatistics> extractTop2Players (List<PlayerStatistics> _list) {

List<PlayerStatistics> _topPlayers = new ArrayList<PlayerStatistics>();

// 1. Group and count
Map<String, Long> _players = _list
.stream()
.filter(x -> (!"".equals(x.getName()) && x.getName()!= null) )
.collect(
Collectors.groupingBy(
PlayerStatistics::getName, Collectors.counting()
)
);
;

// 2 Best Palyers
Set<String> _sortedPlayers = _players.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
.limit(2)
.map(Entry::getKey)
.collect(Collectors.toSet())
;

// 3. Rebuild list
_topPlayers = _list
.stream()
.filter(x -> _sortedPlayers.contains(x.getName()))
.collect(Collectors.toList())
;

return _topPlayers;
}


private PlayerStatistics initialize (int id, String name, int year, int month, int won, int lost) {
return
new PlayerStatistics()
.withId(id)
.withName(name)
.withIdMatchWon(won)
);
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com