Java 8 Stream 求集合元素每个属性的最大值

Java 8 Stream 求集合元素每个属性的最大值,赋值给新对象

public class Mqtt {
    private int temperature;
    private int humidity;
    private int methane;
    ...
}
@Test
public void contextLoads() {
    List<Mqtt> list = new ArrayList<>();
    list.add(new Mqtt(1,1,1));
    list.add(new Mqtt(2,2,2));
    list.add(new Mqtt(3,3,3));
}

问题出现的环境背景及自己尝试过哪些方法

就是一次一次的取stream处理,想请教能否一次stream得出呢

Optional<Mqtt> maxTemperature = list.stream().max(Comparator.comparingInt(Mqtt::getTemperature));
Optional<Mqtt> maxMethane = list.stream().max(Comparator.comparingInt(Mqtt::getMethane));
Optional<Mqtt> maxHumidity = list.stream().max(Comparator.comparingInt(Mqtt::getHumidity));
Mqtt mqtt = new Mqtt();
maxTemperature.ifPresent(t -> mqtt.setTemperature(t.getTemperature()));
maxMethane.ifPresent(t -> mqtt.setHumidity(t.getHumidity()));
maxHumidity.ifPresent(t -> mqtt.setMethane(t.getMethane()));

你期待的结果是什么?

百度了一些 这篇Java 8 Stream简介和复用问题后面提到的StreamSupport.stream能实现stream复用,但是我看不懂。我希望能一次stream得出结果,不知道可不可以

阅读 14.7k
2 个回答

这种场景不用stream可能反而更清晰一些
想要达到需求可能需要自己写一个Collector做,但是太麻烦了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题