Java 8, как получить экземпляр потока с максимальным значением - PullRequest
0 голосов
/ 18 октября 2019

У меня есть класс с именем Control, а другой - CLCControl (этот расширяет Control) и имеет атрибут с именем objective (float).

У меня есть *Класс 1007 *, который содержит Control.

Я хочу получить из потока Step тот, который имеет CLCControl с максимальным значением атрибута objective.

Это то, что я пробовал до сих пор

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

1 Ответ

3 голосов
/ 18 октября 2019

Вы можете сопоставить атрибут с 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 с этой максимальной целью, вы можете сравнить perrfora как:

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
...