有 Java 编程相关的问题?

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

java Lambda的使用消除了

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

我有个问题:

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

基本上将一个列表拆分为两个具有特殊条件的不同列表

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

我的两个代码:

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));
}

以及在我脑海中提出的问题:

  1. 这些是否接近于成为一个正确、良好、遵循良好实践的解决方案
  2. 这对lambda有用吗?你知道如何让它变得更简单吗 也许我应该考虑其他类或方法来完成这个任务?<李>

我已经读到了.parallelStream()部分,所以现在不要介意


共 (1) 个答案

  1. # 1 楼答案

    这可以通过使用partitioningBy

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

    其中partitioned.get(true)将为您提供一个包含状态为MyEnum.STATUS的对象的列表,partitioned.get(false)将为您提供状态为MyEnum.STATUS的对象