我想基于整数数组中的第二个元素对HashMap进行排序。
示例:考虑我有一个如下的哈希图 <“ Alex”,[12,18]>
<“鲍勃”,[13,45]>
<“球”,[13,45]>
<“糖果”,[1,2]>
则输出应为: 鲍勃·亚历克斯·鲍勃(Alex Bob)
我们可以使用Lambda函数吗?
答案 0 :(得分:0)
假设1:int数组已经排序。
在Java中使用Lambda的
HashMap<String, int[]> map = new HashMap<>();
map.put("Alex", new int[] {12,18});
map.put("Bob", new int[] {13,45});
map.put("Ball", new int[] {13,45});
map.put("Candy", new int[] {1,2});
Map<String, int[]> result = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue((int[] a, int[] b) ->
IntStream.of(b).sum() - IntStream.of(a).sum())
)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new));
System.out.println(result);
奖金-在Groovy中:
HashMap<String, List> map = new HashMap<String, List>()
map.put("Alex", [12,18])
map.put("Bob", [13,45])
map.put("Ball", [13,45])
map.put("Candy", [1,2])
println map.sort {a,b -> b.value.sum() <=> a.value.sum()}