有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

函数式编程在不中断流管道的情况下引用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,然后再转换回密钥集。有没有一种方法可以“简化”(双关语)这个操作来

  1. 不要在流和hashmap之间来回移动
  2. 以一种无需在管道之前声明单独映射的方式引用自身

谢谢!


共 (0) 个答案