2

我有以下pojo:

class MyPojo {
    String name;
    int priority;
}

我有一个List<MyPojo>. 现在,我想检索所有具有最高优先级的元素。这些元素的顺序无关紧要。

这对 Java 流有可能吗?我认为我应该首先按优先级分组,然后获取属于最高优先级的所有元素,但我不确定如何以有效的方式做到这一点。

4

2 回答 2

5

您应该将其投射IntStreammax()摆脱它。然后用这个值获取每个 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());
    }
}
于 2020-10-12T07:18:35.483 回答
2

您可以使用 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其中最小值将在前,最大值将在最后。

于 2020-10-12T07:23:41.760 回答