【问题标题】:how to get the if else condition using filter operation of java stream?java - 如何使用java流的过滤操作获取if else条件?
【发布时间】:2021-03-15 08:47:05
【问题描述】:

问题: 从整数列表中得到奇数的平方和偶数的一半,然后返回值列表。

Ans : 1> 我将在 map() 方法中编写逻辑和 if else 条件。

List<Integer> output = intArray.stream().map(x-> {
                        if(x%2 ==0){
                            x=x/2;
                        }else{
                            x= x*x;
                        }
                     }).collect(Collectors.toList());

他们有没有更好的方法专门使用 Filter 来做到这一点?

【问题讨论】:

  • 这段代码可以编译吗?你没有返回任何东西。并且重新分配传入参数对调用者没有影响。 Is Java “pass-by-reference” or “pass-by-value”?
  • 过滤器用于从列表中删除元素。既然你想对它们执行操作,Map 是正确的方法!
  • map(x -&gt; x%2 == 0? x/2: x*x)

标签: java-8 java-stream predicate


【解决方案1】:

尝试使用地图:

map(x -> x % 2 == 0? x / 2: x * x);

让我知道这是否适合您。
您可以了解更多关于地图和过滤器的信息here

【讨论】:

    【解决方案2】:

    当您转换数据(执行数学运算)时,您不能在此处使用FilterFilter 用于过滤掉流中的元素。例如,如果您只想保留偶数,则可以使用 Filter

    您需要使用的是Map,就像您已经使用的那样。请注意,地图应始终返回数据。您的代码缺少此返回语句。

    为了使其更具可读性,您可以将映射逻辑拆分为一个方法。这使您的流易于阅读和遵循(当然,当您给方法起一个好名字时)。

    代码示例

    List<Integer> output = intArray.stream()
                .map(test::divideOrPow)
                .collect(Collectors.toList());
    
    private int divideOrPow(intx) {
        if (x % 2 == 0) {
            return x / 2;
        } else {
            return x * x;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 2021-02-13
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多