对 Java 流中除最大值之外的每个元素进行操作

问题描述 投票:0回答:1

我仍在学习 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)

我不完全确定该怎么做。 我尝试寻找解决方案,但找不到。

java java-stream max
1个回答
2
投票

您可以将流从最大到最小排序,并跳过第一个元素。

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;
         });
© www.soinside.com 2019 - 2024. All rights reserved.