HashMap中如何通过value获取key,并以集合列出来

菠萝印象威 2020-09-18 09:27:08
目前已经知道的是通过设定一个已知的value,然后通过map的entry. getValue()和给定的value是否相等,如果相等,则在list中插入这个key,添加循环。 而我想在不清楚key和value的情况下遍历出value:key的情况,且可能有相同的value,不同的key,最后的结果应该是 {value1:key1} {value1:key100}{value2:key}和{value1:key1,value1:key100,value2:key}
...全文
9029 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
菠萝印象威 2020-09-20
  • 打赏
  • 举报
回复
感谢举例,通过你的例子已经实现了,另外,我在这个例子基础上修改了部分内容
1.新建了一个List对象 List list1=new ArrayList();
2.在System.out.println(s);上面加了list.add(s);在list中添加集合元素
3.跳出遍历list后输出list1的集合内容System.out.println(list1);可以得到需要的形式:[one:1, one:2, two:3, two:4, sss:5]
所以最后的结果有两种list集合类型
投进map
sss=[sss:5]
one=[one:1, one:2]
two=[two:3, two:4]
投进List
one:1
one:2
two:3
two:4
sss:5
[one:1, one:2, two:3, two:4, sss:5]
qybao 2020-09-18
  • 打赏
  • 举报
回复
看不明白LZ想要的结果是什么形式

给你个例子,参考修改吧

public class Sample {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "one"); //测试数据
map.put("2", "one");
map.put("3", "tow");
map.put("4", "tow");
//结果是map的形式,value变成key,value:key的list变成value
Map<String, List<String>> map2 = map.entrySet().stream()
.map(m->String.format("%s:%s", m.getValue(), m.getKey()))
.collect(Collectors.groupingBy(s->s.split(":")[0]));
System.out.println("cast to map:");
for (Map.Entry<String, List<String>> e : map2.entrySet()) {
System.out.println(e);
}

//结果是list的形式,list里存的是value:key
System.out.println("\ncast to list:");
List<String> list = map.entrySet().stream()
.map(m->String.format("%s:%s", m.getValue(), m.getKey()))
.collect(Collectors.toList());
for (String s : list) {
System.out.println(s);
}
}
}
「已注销」 2020-09-18
  • 打赏
  • 举报
回复 2
看不懂你想要做啥。通过value获取key可以通过下面的方法来
    List<Object> keys = map.entrySet().stream().filter(entry -> value.equals(entry.getValue())).map(Entry::getKey).collect(Collectors.toList());

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧