相关疑难解决方法(0)

在继续流式传输时如何获得第一个元素?

我有一堆通用项目。我想打印第一个项目的类名+ toString()所有项目的类名。

如果我有一个Iterable,它将看起来像这样:

Iterable<E> itemIter = ...;
boolean first = true;
for (E e : itemIter) {
    if (first) {
        first = false;
        System.out.println(e.getClass().getSimpleName());
    }
    System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud)

我可以Stream<T>使用流API 在流()上执行此操作吗?

*请注意,这是关于流的问题,而不是关于迭代器的问题。我有一个流-没有迭代器。

java java-8 java-stream

30
推荐指数
4
解决办法
1676
查看次数

Java Lambda - 检查ArrayList to Stream是否为空

我有以下lambda表达式,如果bonusScheduleDurationContainers不为空则工作正常.如果它是空的,我会得到一个NoSuchElementException.我如何在lambda表达式中检查这个?

final List<ScheduleDurationContainer> bonusScheduleDurationContainers
        = scheduleDurationContainersOfWeek.stream()
                                          .filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS)
                                          .collect(Collectors.toList());

final ScheduleDurationContainer bonusScheduleDurationContainer
        = bonusScheduleDurationContainers.stream()
                                         .filter(s -> s.getDayOfWeekStartingWithZero() == dayOfWeekTmp)
                                         .findFirst()
                                         .get();
Run Code Online (Sandbox Code Playgroud)

lambda optional java-8 java-stream

8
推荐指数
1
解决办法
2万
查看次数

Spliterator与Stream.Builder

我读了一些关于如何创建有限的问题Stream( 在Java中有限生成的流 - 如何创建一个?,流如何停止?).

答案建议实施一个Spliterator.在Spliterator将实现逻辑如何和元件,以提供为下一个(tryAdvance).但也有其他两个非默认的方法trySplitestimateSize()我将不得不执行.

JavaDoc Spliterator说:

用于遍历和分区源元素的对象.a覆盖的元素源Spliterator可以是例如阵列,a Collection,IO通道或生成器函数.... Spliterator除了顺序遍历之外,API还支持有效的并行遍历,支持分解以及单元素迭代....

另一方面,我可以实现逻辑如何前进到a周围的下一个元素Stream.Builder并绕过a Spliterator.在每次前进时我都会打电话accept或者add最后打电话build.所以它看起来很简单.

JavaDoc说什么?

一个可变的建设者Stream.这允许Stream 通过单独生成元素并将它们添加到Builder (无需使用ArrayList作为临时缓冲区的复制开销)来创建.

使用StreamSupport.stream我可以用a Spliterator来获取Stream.并且Builder还将提供一个Stream.

什么时候应该/我可以使用Stream.Builder
只有当a Spliterator不会更高效时(例如因为无法对源进行分区并且无法估计其大小)?

java builder java-8 java-stream spliterator

7
推荐指数
1
解决办法
408
查看次数

如果使用Stream.allMatch(),如何为空列表返回false?

我想对Java流使用一条语句。

我要筛选所有要求为“ true”的Servicework对象,然后检查所有Servicework对象的状态是否为“完成”。

但是,如果serviceworkList ist为空,则变量“ validate”为false。我知道allMatch的规范,即如果list为空,则返回true。

关于如何重建流的任何建议,如果list ist为空,我将得到false?

public class Service{

    List<ServiceWork> serviceWorkList = new ArrayList<>();


    boolean validate = serviceWorkList
        .stream()
        .filter(ServiceWork::isRequirement)
        .allMatch(a -> a.getStatus() == Status.DONE);

}
Run Code Online (Sandbox Code Playgroud)

class ServiceWork {

    private Status status;
    private boolean isRequirement;

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public boolean isRequirement() {
        return isRequirement;
    }

    public void setRequirement(boolean requirement) {
        isRequirement = requirement;
    }
}
Run Code Online (Sandbox Code Playgroud)

enum Status {
    DONE, NOT_DONE
}
Run Code Online (Sandbox Code Playgroud)

java java-stream

2
推荐指数
1
解决办法
498
查看次数

Java 11 Lambda - 检查每个对象,满足第一个条件时返回 true,否则返回 false

我有一个方法,效果很好。这就是它的样子。

private boolean roomWithMoreThanTenFurnitures(Building building) {
if (building != null && building.hasRooms()) {
    for (Room room : building.getRooms()) {
        if (room.getFurnitures.size() > 10) {
            return true;
        }
    }   
}
return false;
}
Run Code Online (Sandbox Code Playgroud)

我想把它切换到 Lambda。uo 是用 shell 进来的,但是我不知道外面如何填写 if(条件) return true 或 return false。

building.getRooms().forEach(room -> {
//??
});
Run Code Online (Sandbox Code Playgroud)

java lambda java-11

0
推荐指数
1
解决办法
2449
查看次数

标签 统计

java ×4

java-stream ×4

java-8 ×3

lambda ×2

builder ×1

java-11 ×1

optional ×1

spliterator ×1