我有以下列表:
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Map<Integer, Integer>> map2 = new HashMap<String, Map<Integer, Integer>>();
使用以下代码在我的地图列表中进行一些计算后
map.entrySet().stream().sorted(Map.Entry.<String, Integer>comparingByValue()
.reversed()).limit(1000).forEach(System.out::println);
它返回一个基于整数和名称排序的列表:
team1=1511
team4=1106
team2=805
team3=792
这意味着team1以时间1211排名第一,team4排名第二,时间为1106,依此类推。
现在,在我的map2中,我希望能够根据驱动程序的时间使用相同的列表,但它应该像这样排序:
team1=1511
team4=1106
team1=1010
team2=905
team2=892
team3=750
team3=740
team4=600
这意味着team1的第一名是1511,然后是team4,时间是1106,然后是team1,时间是1010,依此类推。
(基本上,你有一个团队,每个团队至少有2名司机,经过一些计算,你希望能够看到谁赢得了比赛)
对于map2我使用以下内容进行排序和返回:
map2.entrySet().stream().sorted(Map.Entry.<String, Map<Integer, Integer>>comparingByKey()
.reversed()).limit(1000).forEach(System.out::println);
但这不会返回正确的结果。
我想知道是否可以使用hashmap执行此操作,或者甚至使用ArrayList ??
答案 0 :(得分:0)
另一种方法......为什么不单独上课呢?
public class Standing implements Comparable<Standing> {
private String team;
private Integer time;
public Standing(String team, Integer time) {
this.team = team;
this.time = time;
}
public String getTeam() {
return this.team;
}
public Integer getTime() {
return this.time;
}
@Override
public String toString() {
return this.team + "=" + this.time;
}
public int compareTo(Standing standing) {
return (this.time).compareTo(standing.getTime());
}
}
我会在这里使用:
Map<String, ArrayList<Integer>> map2 = new HashMap<String, ArrayList<Integer>();
这样:
TreeSet<Standing> standingSet = new TreeSet<Standing>();
for (String team : map2.keySet()) {
standingSet.add(new Standing(team, map2.get(team).get(0)));
standingSet.add(new Standing(team, map2.get(team).get(1)));
}
for (Standing standing : standingSet) {
System.out.println(standing);
}
答案 1 :(得分:0)
假设map2
包含:
team1: {
1: 1506,
2: 1010
},
team4: {
1: 1106,
2: 600
}
...然后你可以按照以下方式对其进行排序:
List<DriverResult> results = map2.entrySet().stream()
.flatMap(e -> e.getValue().entrySet().stream()
.map(e2 -> new DriverResult(e.getKey(), e2.getKey(), e2.getValue()))
)
.sorted(Comparator.comparing(DriverResult::getTime))
.collect(Collectors.toList());
这个助手类:
public class DriverResult {
private String team;
private int number;
private int time;
public DriverResult(String team, int number, int time) {
this.team = team;
this.time = time;
this.number = number;
}
public int getTime() {
return time;
}
}