根据每个成员的字段对列表进行排序

时间:2016-10-22 07:05:36

标签: java collections

假设我有以下List,其中包含ENTITY类型的项目。 ENTITY有一个整数字段,用于确定其自然顺序。我想根据该字段的值得到ENTITY这是最大值或最小值。我怎样才能在Java中实现它?

List<ENTITY> lt = new ArrayList<ENTITY>();

class ENTITY
{
    int field;
    /* Constructor, getters, setters... */
}

2 个答案:

答案 0 :(得分:2)

使用Collections.sortComparator对列表进行排序。根据您是按升序还是按升序排序,max和min元素的位置会有所不同。在任何一种情况下,它们都在相反的两端,一个在列表的顶部,一个在底部。要按升序排序(列表开头的最小元素,最后的最大元素),您可以使用以下内容:

Collections.sort(lt, new Comparator<ENTITY> {
    public int compare(ENTITY o1, ENTITY o2) {
        if (o1 == null) {
            if (o2 == null) {
                return 0;
            }
            return -1;
        }
        else if (o2 == null) {
            return 1;
        }

        // If field is Comparable:
        return o1.getField().compareTo(o2.getField());

        // OR - If field is an int
        return o1.getField() < o2.getField() ? -1 : (o1.getField() > o2.getField() ? 1 : 0);
    }
});

答案 1 :(得分:1)

//stream the elements, map to their fields, and get the max
return lt.stream().max((e1, e2) -> Integer.compare(e1.filed, e2.filed)).orElse(/* default */);

Java 8的流API的许多应用程序中的一个。

虽然我建议先编写一些编码约定。