【问题标题】:Display only map key from List<Map<String, List<String>>>仅显示 List<Map<String, List<String>>> 中的映射键
【发布时间】:2018-12-07 21:47:42
【问题描述】:

我有以下结构:

List<Map<String, List<String>>> filters

考虑以下示例:

filters=[{product=[A1, A2, A3]}]

我只想显示地图键而不是值。

预期输出:

product

我尝试了以下方法:

String op = filters.get(i).keySet().toString();

这给了我以下输出:

[product]

我也尝试过使用 .stream() ,但没有奏效。我只想显示键(一个或多个),即在这种情况下:产品

任何帮助将不胜感激。

【问题讨论】:

  • 如果输入是[{a:[1], b:[2]}, {a:[3], c:[4]}] 应该输出什么? [[a, b], [a, c]][a, b, a, c][a, b, c]?

标签: java arrays list hashmap key-value


【解决方案1】:

你可以使用:

filters.stream().flatMap(c -> c.keySet().stream())
         .forEach(System.out::println);

编辑:

我想将收到的输出示例:(产品)传递给另一个 功能。那会在 .forEach 部分完成吗?我不想 在那里打印

不,在这种情况下,您可以将结果收集到 List 中,然后将其返回,例如:

public List<String> myFunction(List<Map<String, List<String>>> filters){
    return filters.stream()
            .flatMap(c -> c.keySet().stream())
            .collect(Collectors.toList());
}

然后你可以这样消费它:

List<String> result = myFunction(filters);
result.forEach(System.out::println);

【讨论】:

  • 我想将收到的输出示例:(产品)传递给另一个函数。那会在 .forEach 部分完成吗?我不想在那里打印。感谢您的帮助。
  • @TeeJay 不收集所有结果并返回我编辑我的答案检查它
【解决方案2】:

这应该可以解决问题

List<String> collect = filters.stream()
                              .flatMap(entry -> 
                                           entry.keySet().stream())
                                          .collect(Collectors.toList());

collect 将拥有地图的所有键。

【讨论】:

    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2023-03-23
    • 1970-01-01
    • 2017-11-25
    • 2021-04-29
    • 2017-05-21
    相关资源
    最近更新 更多