首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashMultimap的数据处理

HashMultimap的数据处理
EN

Stack Overflow用户
提问于 2021-12-31 02:02:55
回答 2查看 113关注 0票数 2

我有一个HashMultimap

Multimap<String, String> map = HashMultimap.create();

我在地图上放的数据是

代码语言:javascript
复制
map.put("cpu", "i9");
map.put("hang", "MSI");
map.put("hang", "DELL");
map.put("hang", "DELL");
map.put("cpu", "i5");
map.put("hang", "HP");
map.put("cpu", "i7");

我有一条小溪

代码语言:javascript
复制
String joinString = map.entries().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining(" OR "));

我需要输出

(hang=HP或hang=MSI或hang=DELL) (cpu=i9或cpu=i5或cpu=i7)

我需要一个AND在钥匙之间。我怎么能这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-31 02:55:51

使用Map视图:

代码语言:javascript
复制
String joined = map.asMap()
        .entrySet()
        .stream()
        .map(e -> e.getValue()
                .stream()
                .map(v -> e.getKey() + "=" + v)
                .collect(Collectors.joining(" OR ", "(", ")")))
        .collect(Collectors.joining(" AND "));
票数 4
EN

Stack Overflow用户

发布于 2021-12-31 03:23:58

当然,schmosel击败了我,但是这里的api/用法略有不同:

代码语言:javascript
复制
String joined = map.keySet() // keySet() instead of asMap()
  .stream().map(k
    -> String.format( // string.format instead of concatenation ;)
        "(%s)",
        map.get(k).stream() // map.get(k) instead of e.getValue()
            .map(v
                -> String.format("%s=%s", k, v))
            .collect(Collectors.joining(" OR "))
       )
  ).collect(Collectors.joining(" AND "));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70538376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档