How to stream a map with a values Stream<String> using Stream API?

问题描述 投票:0回答:2

我有地图

Map<String, Stream<String>>
。我需要构建所有参与者的排序流而不重复(忽略 null 或空字符串、额外的空格和区分大小写)。

例如,对于给定的地图 {“A”=[“B”、“C”、“D”]、“B”=[“kas”、“B”、“c”、“dddd”]}

我应该得到 [“B”、“C”、“D”、“Dddd”、“Kas”]

我需要创建这样的方法,但我什至不知道如何开始。将感谢任何建议!

public Stream<String> listN(Map<String, Stream<String>> map) {
      
    }
java stream java-stream
2个回答
1
投票

将地图的值、flapMap 流式传输到字符串流,然后应用各种过滤器和修改、不同、排序:

public Stream<String> listN(Map<String, Stream<String>> map) {
    return map.values().stream()
      .flatMap(Collection::stream)
      .filter(s -> s != null && !s.isEmpty())
      .map(s -> s.trim())
      .map(s -> s.toLowerCase())
      .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1))
      .distinct()
      .sorted();
}

免责声明:这个答案是通过我的手机拇指输入的,因此它可能无法正常工作甚至无法编译,但它很有可能会工作。


0
投票

如果我做对了,你不需要使用地图的键,那么你可以使用地图的 values() 方法,对它们使用 flatMap 来展平结果(你可能必须先将列表映射到流) ,然后你可以使用 sorted(),最后是 distinct(),所有 Stream 的方法。

© www.soinside.com 2019 - 2024. All rights reserved.