如何按Set大小总和对Map <String,List <Set <Long >>>进行排序?

Jes*_*ias 4 java java-8 java-stream

如何按Set大小总和对Map(String,List(Set(Long)))排序?我有一个像这样的HashMap:

myMap.put("monday", [[3215, 5654], [5345], [3246, 7686, 4565]]) // 6 Long elements in total
myMap.put("tuesday", [[3215, 5654], [5345, 2879, 6734], [3246, 7686, 4565]]) // 8 Long elements in total
myMap.put("wednesday", [[9845, 2521], [0954]]) // 3 Long elements in total
Run Code Online (Sandbox Code Playgroud)

我希望myMap排序如下:

("tuesday", [[3215, 5654], [5345, 2879, 6734], [3246, 7686, 4565]]) // 8 Long elements in total
("monday", [[3215, 5654], [5345], [3246, 7686, 4565]]) // 6 Long elements in total
("wednesday", [[9845, 2521], [0954]]) // 3 Long elements in total
Run Code Online (Sandbox Code Playgroud)

Dea*_*ool 5

使用LinkedHashMap排序:

Map<String, List<Set<Long>>> result = map.entrySet()
    .stream()
    .sorted(Comparator.comparingInt(e->e.getValue().stream().mapToInt(Set::size).sum()))
    .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
Run Code Online (Sandbox Code Playgroud)