假设我有以下List
,其中包含ENTITY
类型的项目。 ENTITY
有一个整数字段,用于确定其自然顺序。我想根据该字段的值得到ENTITY
这是最大值或最小值。我怎样才能在Java中实现它?
List<ENTITY> lt = new ArrayList<ENTITY>();
class ENTITY
{
int field;
/* Constructor, getters, setters... */
}
答案 0 :(得分:2)
使用Collections.sort
和Comparator
对列表进行排序。根据您是按升序还是按升序排序,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的许多应用程序中的一个。
虽然我建议先编写一些编码约定。