【问题标题】:Java 8 how to obtain stream instance with max valueJava 8如何获取具有最大值的流实例
【发布时间】:2019-10-18 08:56:42
【问题描述】:

我有一个名为Control 的类,另一个是CLCControl(这个扩展了Control)并有一个名为objective(float)的属性。

我有一个Step 类,其中包含一个Control

我想从Step 流中获取,它具有CLCControl 和最大objective 属性值。

这是我目前尝试过的

stepTableView.getItems().stream().filter(step -> step.getControl() instanceof CLCControl).map(CLCControl.class::cast).max();

【问题讨论】:

  • 为了找到最大的东西,您需要能够订购它们。默认情况下,对象是不可比较的,因此不能在没有例如的情况下订购。比较器。

标签: java filter java-8 java-stream


【解决方案1】:

您可以将属性映射到double 并找到max 为:

.stream()
.filter(step -> step.getControl() instanceof CLCControl)
.map(CLCControl.class::cast)
.mapToDouble(Control::getObjective) // << here or `CLCControl::getObjective` for sub class
.max();

如果您要找到具有此最大目标的 Step,您可以进行比较:

Step maxObjectiveStep = stepTableView.stream()
        .filter(step -> step.getControl() instanceof CLCControl)
        .max((o1, o2) -> Float.compare(o1.getControl().getObjective(), o2.getControl().getObjective()))
        .orElse(null); // some default

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2016-03-09
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多