我有地图
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) {
}
将地图的值、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();
}
免责声明:这个答案是通过我的手机拇指输入的,因此它可能无法正常工作甚至无法编译,但它很有可能会工作。
如果我做对了,你不需要使用地图的键,那么你可以使用地图的 values() 方法,对它们使用 flatMap 来展平结果(你可能必须先将列表映射到流) ,然后你可以使用 sorted(),最后是 distinct(),所有 Stream 的方法。