函数式编程在不中断流管道的情况下引用Java流之前的步骤?
我是函数式编程新手,我正在努力变得更好
目前,我正在试验一些具有以下基本形式的代码:
private static int myMethod(List<Integer> input){
Map<Integer,Long> freq = input
.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
return (int) freq
.keySet()
.stream()
.filter(key-> freq.containsKey(freq.get(key)))
.count();
}
首先,使用hashmap获取列表中每个数字的频率。下一步,我们总结出地图中作为键存在的键的数量
我不喜欢的是,这两个流需要彼此分开存在,其中一个HashMap是由一个流生成的,只会被另一个流立即独占地使用
有没有一种方法可以将其合并为一个流?我是这样想的:
private static int myMethod(List<Integer> input){
return (int) input
.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.keySet()
.stream()
.filter(key-> freq.containsKey(freq.get(key)))
.count();
}
但这里的问题是没有可参考的freq map,因为它被用作管道的一部分,所以过滤器无法完成它需要做的事情
总之,我不喜欢这样的情况,即只收集到hashmap,然后再转换回密钥集。有没有一种方法可以“简化”(双关语)这个操作来
- 不要在流和hashmap之间来回移动
- 以一种无需在管道之前声明单独映射的方式引用自身李>
谢谢!
共 (0) 个答案