【问题标题】:Group Entries of a map into list将地图的条目分组到列表中
【发布时间】:2020-12-22 07:49:41
【问题描述】:

假设我有一个带有一些条目的 HashMap:

Map hm= new HashMap();
hm.put(1,"ss");
hm.put(2,"ss");
hm.put(3,"bb");
hm.put(4,"cc");
hm.put(5,"ss");

我想要这样的输出:

[{1,ss},{2,ss},{5,ss}]

有可能吗?

【问题讨论】:

  • 我看到您使用的是原始类型(例如,Map 没有类型参数)。几个答案已经提到了这一点——你不应该使用原始类型,总是指定类型参数,即Map<Integer, String>

标签: dictionary java-8 java-stream grouping entryset


【解决方案1】:

当然是:

List<Map.Entry<Integer,String>> list =
    hm.entrySet().stream().collect(Collectors.toList());

您应该将Map 的定义更改为:

Map<Integer,String> hm = new HashMap<>();

附:您没有指定是想要输出List 中的所有条目,还是只想要其中的一部分。在示例输出中,您仅包含具有“ss”值的条目。这可以通过添加过滤器来实现:

List<Map.Entry<Integer,String>> list =
    hm.entrySet().stream().filter(e -> e.getValue().equals("ss")).collect(Collectors.toList());
System.out.println (list);

输出:

[1=ss, 2=ss, 5=ss]

编辑:您可以按所需格式打印 List,如下所示:

System.out.println (list.stream ().map(e -> "{" + e.getKey() + "," + e.getValue() + "}").collect (Collectors.joining (",", "[", "]")));

输出:

[{1,ss},{2,ss},{5,ss}]

【讨论】:

  • 输出类似于 - [1=ss, 2=ss, 3=bb, 4=cc, 5=ss]。我的问题是这个陈述是否可以成为答案。 [{1,ss},{2,ss},{5,ss}]
  • @ShrutiGusain 请参阅我答案的第二部分,其中包含filter。这将产生输出[1=ss, 2=ss, 5=ss]
  • 我希望以与我的输出中所示相同的模式输出,即在花括号内设置条目。这可能吗?
  • @ShrutiGusain 你希望输出列表的类型是什么? List&lt;Map.Entry&lt;Integer,String&gt;&gt; 还是 List&lt;SomethingElse&gt;?这会影响我的回答。
  • 输出应该是这样的模式 - [ {EntrySet.key , EntrySet.Value } , {EntrySet.key , EntrySet.Value } ]
【解决方案2】:

首先,您像这样声明您的 HashMap:

HashMap<Integer, String> hm = new HashMap<>();

然后在放置键和值之后,您可以像这样打印整个 HashMap:

System.out.println("Mappings of HashMap hm1 are : " + hm);

如果要打印 key 等于 1 的值,那么:

if (hm.containsKey(1)) { 
            String s = hm.get(1); 
            System.out.println("value for key 1 is: " + s); 
        } 

【讨论】:

  • 输出应该是这样的模式 - [ {EntrySet.key , EntrySet.Value } , {EntrySet.key , EntrySet.Value } ] 是的,抱歉我需要使用流来完成
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多