Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Lambda消除if_Java_Lambda - Fatal编程技术网

Java 使用Lambda消除if

Java 使用Lambda消除if,java,lambda,Java,Lambda,试图学习一些关于lambda实用用法的新知识 我有一个问题: 我有一个对象,里面有一些其他对象的列表。这些对象具有MyEnum字段。我希望遍历这些对象,获取该枚举的状态,然后根据该状态,如果满足条件,我希望将该对象添加到列表1中。如果不是,我想将该对象添加到列表2中 基本上,通过特殊条件将一个列表拆分为两个不同的列表 我已经通过两种方法实现了这一点,一种是古老的,每种都是经典的,第二种是Java8Lambdas,我也在努力学习 我的两个代码: void groupObjects() {

试图学习一些关于lambda实用用法的新知识

我有一个问题:

我有一个对象,里面有一些其他对象的列表。这些对象具有MyEnum字段。我希望遍历这些对象,获取该枚举的状态,然后根据该状态,如果满足条件,我希望将该对象添加到列表1中。如果不是,我想将该对象添加到列表2中

基本上,通过特殊条件将一个列表拆分为两个不同的列表

我已经通过两种方法实现了这一点,一种是古老的,每种都是经典的,第二种是Java8Lambdas,我也在努力学习

我的两个代码:

void groupObjects() {

    for (ListObject listObject : object.getList()) {
        if (MyEnum.STATUS.equals(listObject.getStatus())) {
            otherList.add(listObject);
        } else {
            someOtherList.add(listObject);
        }
    }
}


void groupObjects() {

    object.getList().parallelStream()
            .filter(listObject-> MyEnum.STATUS.equals(listObject.getStatus()))
            .forEach(listObject-> otherList.add(listObject));
    object.getList().parallelStream()
            .filter(listObject-> !MyEnum.STATUS.equals(listObject.getStatus()))
            .forEach(listObject-> someOtherList.add(listObject));
}
以及在我脑海中提出的问题:

  • 这些是否接近于成为一个正确、良好、遵循良好实践的解决方案
  • 这对lambda有用吗?你知道如何让它更简单吗
  • 也许我应该考虑其他类或方法来完成这个任务?
    我已经读过关于
    .parallelStream()
    部分的内容,所以现在不要介意。

    这可以通过使用
    partitionby

    Map<Boolean, List<SomeClass>> partitioned = object.getList().stream()
        .collect(partitioningBy(listObject->MyEnum.STATUS.equals(listObject.getStatus()))
    
    Map partitioned=object.getList().stream()
    .collect(分区依据(listObject->MyEnum.STATUS.equals(listObject.getStatus()))
    

    Where
    partitioned.get(true)
    将为您提供一个包含状态为
    MyEnum.status
    partitioned.get(false)
    的对象的列表。get(false)

    partitioningBy()在哪里定义?这是静态导入吗?从
    java.util.stream.Collectors
    静态导入。三元表达式
    (MyEnum.STATUS==object.getStatus)?otherList:someOtherList
    可能是最简单的方法。