java - 如何按集合的值流式传输 map ?

标签 java collections java-8 java-stream

如何流式传输 Map<String, List<String>>得到:

  1. A List<String>所有StringList 的 s Map 的 s哪些长度超过 5 个字符?如何获得这些的长数?

  2. A Map<String, List<String>>其中键保持不变,但 List s 仅包含 String s 的长度大于 5?

  3. A Map<String, Long>计数为 String s 长于 List 中的 5每个 map 的键?

我开始了一些事情,但我被困住了:

long l = map.entrySet().stream()
            .filter(m -> m.getValue().stream().filter(s -> s.length() > 5)

谢谢

最佳答案

对于第一个问题,您可以使用 flatMap 合并 List,然后过滤掉短的 String:

List<String> longStrings = 
    map.values()
       .stream()
       .flatMap(Collection::stream)
       .filter(s->s.length() > 5)
       .collect(Collectors.toList());

对于第二个问题,您似乎想从源 Map 创建一个新的 Map,其中键保持不变,并且值经过过滤:

示例输入:

Map<String, List<String>> map = new HashMap<> ();
map.put ("one", Arrays.asList (new String[]{"1","2","12345","123456"}));
map.put ("two", Arrays.asList (new String[]{"1","123456","12345","12"}));
map.put ("three", Arrays.asList (new String[]{"1","2","12","34"}));
map.put ("four", Arrays.asList (new String[]{"12345","123456","1234567","123"}));

处理:

Map<String, List<String>> output =
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getKey,
                                 e->e.getValue()
                                     .stream()
                                     .filter(s -> s.length() > 5)
                                     .collect(Collectors.toList())));

输出:

{four=[123456, 1234567], one=[123456], three=[], two=[123456]}

第三个问题是第二个问题的微小变化:

Map<String, Long> output =
    map.entrySet()
       .stream()
       .collect(Collectors.toMap(Map.Entry::getKey,
                                 e->e.getValue()
                                     .stream()
                                     .filter(s -> s.length() > 5)
                                     .count()));

关于java - 如何按集合的值流式传输 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40151350/

相关文章:

java - 使用 Streams API 根据字段值求和对象

java - 在maven元素中我如何指定文件的相对路径

java - 在JSP中上传目录的内容

python - 通过索引访问 collections.OrderedDict 中的项目

java - 为清楚起见命名集合扩展

java - 如何在java 8中过滤Optional.empty

java - 防止 Android 应用程序关闭/停止

Java - 如果我向类添加一个方法,它的每个实例是否会占用更多空间?使方法静态会改变什么吗?

java - 在 Java 中处理静态集合

java - 使用通用供应商和 lambda 进行类型检查