我有一个HashMap
,我想找到每个值的键数
Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>() {{
put(0, Arrays.asList(1, 2));
put(1, Arrays.asList(2, 0, 3));
put(2, Arrays.asList(4,0,1));
put(3, Arrays.asList(4,1, 5));
put(4, Arrays.asList(5,2,3));
put(5, Arrays.asList(4,3));
}};
根据上面的帖子,我尝试了平面映射:
Map<Object, Long> ex =
map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
System.out.println(ex);
输出是
{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}.
这意味着0有两个键,1有三个键,依此类推。现在,我想根据键的数量以降序对键和值进行排序。我尝试过这样的事情:
Map<Object, Long> ex =
map.values()
.stream()
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(v -> v, Collectors.counting()));
.entrySet()
.stream()
.sorted(Map.Entry.<String, Long>comparingByValue(reverseOrder()).thenComparing(Map.Entry.comparingByKey()))
.collect(LinkedHashMap::new, (m,e) -> m.put(e.getKey(), e.getValue()), Map::putAll);
我想要以下输出:
1=[2, 3, 0], 2=[1,4,0], 3=[1, 4, 5], 4=[2, 3, 5], 0=[1, 2], 5=[3, 4]
键和值应根据此键的数量降序排列{0=2, 1=3, 2=3, 3=3, 4=3, 5=2}
:1、2、3、4具有三个键,0和5具有两个键。
例如::1=[2, 3, 0]
1具有三个键,因此它首先出现[2, 3, 0]
:2和3具有三个键,而0仅具有两个键。
您可能具有以下内容:
Map<Integer, List<Integer>> sorted =
map.entrySet()
.stream()
.sorted(comparing(e -> ex.get(e.getKey()), reverseOrder()))
.collect(toMap(
Map.Entry::getKey,
e -> e.getValue().stream().sorted(comparing(ex::get, reverseOrder())).collect(toList()),
(v1, v2) -> { throw new IllegalStateException(); },
LinkedHashMap::new
));
这将创建一个映射条目的流,根据该条目的键的键计数以相反的顺序对它们进行排序,最后将其收集到一个映射中,在该映射中,新值相对于每个整数的计数以相反的顺序进行排序(ex::get
)。收集地图是LinkedHashMap
为了保留遭遇顺序。
输出:
{1=[2, 3, 0], 2=[4, 1, 0], 3=[4, 1, 5], 4=[2, 3, 5], 0=[1, 2], 5=[4, 3]}
使用的静态导入:
import static java.util.Comparator.comparing;
import static java.util.Comparator.reverseOrder;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
我有一个HashMap,其中类的对象(对象1,对象2,对象3)作为键,java.util.Date(日期1,日期2,日期3)作为值。HashMap已经根据值进行了排序,即基于日期对象。键对象具有名为name的属性。 现在,当HashMap的值相同时,即当值的日期相同时,我需要检查键对象的名称(obj.name),并根据键对象的名称属性对HashMap进行排序。请注意,只有当HasHMap和值的日期
我要找到最重要的钥匙。
问题内容: 假设我有一些新闻存储在哈希中。我有不同的哈希值(每个哈希值代表一个消息): 我想用KEYS命令检索所有键: 密钥未排序的问题: 我想以正确的顺序检索键列表。我不确定哈希是否是我需要的结构。但是,根据redis文档: Redis哈希是字符串字段和字符串值之间的映射,因此它们是表示对象的理想数据类型(例如,具有多个字段(例如名称,姓氏,年龄等)的用户): 将我的新闻对象存储在散列中似乎是个
我使用stackoverflow链接中的第一个解决方案来创建和读取一个包含两个键和一个值的hashMap。即 如何将键/值对放在这个HashMap上? 简而言之,我希望做相当于 但对于多键hashmap。
问题内容: 我有一堆带有前缀的散列,例如:“ prefix:” 在每个哈希值下面是一堆键,例如:“ cc_XX”,其中“ XX”是2个字母的代码。 我需要一些如何遍历所有redis散列的方法,并删除每一个cc_XX子键的某些方法,并且正在寻找一种cli / lua方式来做到这一点(两者都不好)。 任何建议将不胜感激。 问题答案: 下面的EVAL脚本应执行所需的操作: 您需要通过提供以下参数来调用它
例如,我有Hashmap 如何根据键的某些属性对Map进行排序?