我有一个HashMap
这样的:
Map<String, List<String>> map = new HashMap<>();
map.put("USA", Arrays.asList("CA","IA","IL"));
map.put("India", Arrays.asList("MUM","CAL"));
map.put("Canada", Arrays.asList("TOR"));
我想根据列表值的大小按升序对地图进行排序。我怎样才能做到这一点?
在这种情况下,我希望订购加拿大,印度,美国的钥匙。
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
之所以引发,是因为合并器功能仅用于并行流],而我们并未使用。
comparingByValue
如果您觉得可读性更好,也可以使用:
import static java.util.Map.Entry.comparingByValue;
Map<String, List<String>> sorted = map.entrySet().stream()
.sorted(comparingByValue(comparingInt(List::size)))
// ... as above
问题内容: Stream >> sorted = index.entrySet().stream() .sorted(Map.Entry.comparingByValue()); 类型中的方法不适用于参数 我想根据作为的值的列表对a进行排序。如何使用Java 8中的Stream库实现此目的? 问题答案: 这可能对您有帮助。 我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。
在value是集合的情况下,有没有办法按值对地图条目进行排序?我想按集合的大小对条目进行排序。到目前为止我的代码:
假设我们有一个叫做活动的班级: 因此,每个活动对象都将有一个项目。。而且每个项目都有一个单元。两个不同的项目可以具有相同的单元: 一个单位也有一个名字: 所以目前我有一个树状图像这样: 一个例子可能是: 等 现在让我们假设projectOne与projectThree具有相同的单元(unitAAA),projectThree具有UNITZZ。。。 我想按项目元素的单位按字母顺序对地图进行排序: 我
如何根据条目列表的值和键对地图进行排序 首先按Value desc排序,然后如果值冲突按Key Desc排序 给定地图中的示例: 预期订单:
有了上面的地图值列表,我需要在一个伸展过程中根据date1和date2进行排序,从而得到下面的输出… 对于上述输入数据,我要求的O/P顺序是: