【发布时间】:2022-01-18 00:18:21
【问题描述】:
我有一种方法可以按不同的标准对列表进行排序并返回具有最大值的列表的名称(实例变量)。如果有多个实例具有最大值,则应将它们的所有名称连接起来。
假设我有如下的 A 类。
Class A {
...
String getName(){...}
int getValue1() {...}
int getValue2() {...}
...
int getValueN() {...}
...
}
我有a List<A> listToSort。我通常会将这个列表排序为listToSort.sort(Comparator.comparing(A::getValue1)) 或listToSort.sort(Comparator.comparing(A::getValue2)),依此类推。然后获取共享最大值的那些。
在我认为应该这样做的方法中:
String getMaxString (Comparator c) {
listToSort.sort(c);
...
}
并发送Comparator.comparing(A.getValueX) 作为参数以使用不同的方法调用它。 (这里的 X 表示 getValue 函数的任意数字)。
但是,我还需要返回共享相同值的其他实例 我需要将 Class 方法传递给我的方法并调用实例:
String getMaxString (Comparator c) {
listToSort.sort(c);
int maxValue = listToSort.get(listToSort.size() - 1).getValueX();
String maxString = listToSort.get(listToSort.size() - 1).getName();
for (int i = listToSort.size() - 2; i >= 0; i--) {
if (listToSort.get(i).getValueX()() == maxValue) {
maxString += ", " + listToSort.get(i).getName();
}
}
return maxString;
}
如何通过此方法调用此处的实例?还是我需要考虑其他方式?
编辑:
我有一个List<Course> mylist 的课程列表,其中课程可以简化为:
Class Course {
private String name;
private int capacity;
private int students;
...
//bunch of getters.
}
我的任务是返回具有最大容量的课程、注册学生最多的课程、难度最大的课程、最大填充百分比、具有TA的最大数量等...
编辑 2: 根据评论部分的要求。
列表
Course a (name "a", capacity 10, students 5)
Course b (name "b", capacity 20, students 5)
Course c (name "c", capacity 30, students 0)
根据容量排序应该返回“c”
基于学生的排序应该返回“a b”
【问题讨论】:
-
所以任务是从列表中提取 MAX 值?
-
'by different criteria' - 表示标准将作为方法参数提供,以指定必须使用哪些对象属性(value1、value2 等)进行比较?
-
任务是从列表中提取最大值,其中最大值由类上定义的不同函数定义。假设我们有 List 和三个元素 a1、a2 和 a3。如果我们根据方法 getValue1() 排序,a1 可能是最大值,如果我们按 getValue2() 排序,a2 可能是最大值,如果我们按 getValue3() 排序,所有可能都相等,因此我们可能需要返回所有这些。
-
是的,你的第二条评论就是我想做的。出现问题的原因可能不是只有一个,而是多个。检查我是否想不出不使用实例方法的方法。
-
不需要对整个列表进行排序来确定具有最大值的实例。你可以遍历它一次。
标签: java java-8 instance-methods