我仍在学习 Java 流,无法找到解决我的问题的方法。
我有一个对象列表,每个对象都有一个名为
stageNo
的标识符。
我正在尝试根据
stageNo
过滤掉最大对象并调用方法来设置特定值。
代码:
Object currentObject = new Object();
List<Object> objects = new ArrayList<>();
objects
.stream()
.filter(object -> object.stageNoCalculate == currentObject.getStageNo)
.filter(object -> object.executionDate != null)
.max(Comparator.comparing(Object::getStageNo)
.map(object -> {
object.setFlag(1);
return object;
}).get();
这将产生具有最大 stageNo 的对象,并将相应的标志方法设置为 1。这可以正常工作,没有问题。
现在我试图找到除最大值之外满足相同过滤条件的每个其他对象: 找到与 max 不同的所有内容,然后调用
setFlag(0)
。
我不完全确定该怎么做。 我尝试寻找解决方案,但找不到。
您可以将流从最大到最小排序,并跳过第一个元素。
objects
.stream()
.filter(object -> object.stageNoCalculate == currentObject.getStageNo)
.filter(object -> object.executionDate != null)
.sorted(Comparator.comparing(Object::getStageNo).reversed())
.skip(1) //Skip the first element, which is the max
.forEach(object -> {
object.setFlag(0);
return object;
});