Java 8 如何使用java流的过滤操作获取if-else条件?

Java 8 如何使用java流的过滤操作获取if-else条件?,java-8,java-stream,predicate,Java 8,Java Stream,Predicate,问题: 从整数列表中得到奇数的平方和偶数的一半,然后返回值列表 Ans:1>我将在map()方法中写入逻辑和if-else条件 List output=intArray.stream().map(x->{ 如果(x%2==0){ x=x/2; }否则{ x=x*x; } }).collect(Collectors.toList()); 他们是否有更好的方法专门使用过滤器来实现这一点?尝试使用地图: 让我知道这是否适合您。 您可以了解有关映射和筛选的更多信息在转换数据(执行数学运算)时,您不能在

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

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

List output=intArray.stream().map(x->{
如果(x%2==0){
x=x/2;
}否则{
x=x*x;
}
}).collect(Collectors.toList());
他们是否有更好的方法专门使用过滤器来实现这一点?

尝试使用地图: 让我知道这是否适合您。

您可以了解有关映射和筛选的更多信息

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

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

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

代码示例
List output=intArray.stream()
.map(测试::divideOrPow)
.collect(Collectors.toList());
专用int-divideOrPow(intx){
如果(x%2==0){
返回x/2;
}否则{
返回x*x;
}
}

此代码正在编译吗?你什么也不退。重新分配传入参数对调用方没有影响。过滤器用于从列表中删除元素。因为您想对它们执行操作,所以Map是正确的方法<代码>映射(x->x%2==0?x/2:x*x)
List<Integer> output = intArray.stream().map(x-> {
                        if(x%2 ==0){
                            x=x/2;
                        }else{
                            x= x*x;
                        }
                     }).collect(Collectors.toList());
map(x -> x % 2 == 0? x / 2: x * x);
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;
    }
}