我有以下pojo:
class MyPojo {
String name;
int priority;
}
我有一个List<MyPojo>
. 现在,我想检索所有具有最高优先级的元素。这些元素的顺序无关紧要。
这对 Java 流有可能吗?我认为我应该首先按优先级分组,然后获取属于最高优先级的所有元素,但我不确定如何以有效的方式做到这一点。
我有以下pojo:
class MyPojo {
String name;
int priority;
}
我有一个List<MyPojo>
. 现在,我想检索所有具有最高优先级的元素。这些元素的顺序无关紧要。
这对 Java 流有可能吗?我认为我应该首先按优先级分组,然后获取属于最高优先级的所有元素,但我不确定如何以有效的方式做到这一点。
您应该将其投射IntStream
并max()
摆脱它。然后用这个值获取每个 pojos。
import java.util.List;
import java.util.stream.Collectors;
class MyPojo {
String name;
int priority;
public int getPriority() {
return priority;
}
}
public class Main {
public static void main(String[] args) {
List<MyPojo> list = null;
int max = list.stream().mapToInt(MyPojo::getPriority).max().orElse(Integer.MIN_VALUE);
List<MyPojo> maxPojos = list.stream().filter(pojo -> pojo.getPriority() == max).collect(Collectors.toList());
}
}
您可以使用 aTreeMap
和来执行此操作Collectors.groupingBy()
:
TreeMap<Integer, List<MyPojo>> map = pojos.stream()
.collect(Collectors.groupingBy(
MyPojo::getPriority,
TreeMap::new,
Collectors.toList()
));
List<MyPojo> maxPrios = map.lastEntry().getValue();
由于slastEntry()
的自然排序,将返回具有最高优先级的 pojo,Integer
其中最小值将在前,最大值将在最后。