HashMap
没有保证的迭代顺序,因此您需要收集到LinkedHashMap
才能使排序有意义。
import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.toMap;
Map<String, List<String>> sorted = map.entrySet().stream()
.sorted(comparingInt(e -> e.getValue().size()))
.collect(toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(a, b) -> { throw new AssertionError(); },
LinkedHashMap::new
));
之所以抛出,是因为合并器函数仅用于并行流,而我们没有使用并行流。AssertionError
如果您发现它更具可读性,也可以使用compareByValue
:
import static java.util.Map.Entry.comparingByValue;
Map<String, List<String>> sorted = map.entrySet().stream()
.sorted(comparingByValue(comparingInt(List::size)))
// ... as above