3

Employeeインターフェイスを実装するというクラスがありComparableます。

これで、リストに5 つEmployeeのオブジェクトがあり、それぞれに独自のsalaryプロパティがあります。Employee最高の給与を持つすべてのオブジェクトを見つけたいです。

を使用して単一のオブジェクトを取得できます

 Employee employee = Collections.max(employeeList);

Employeeしかし、同じ最大値を持つすべてのオブジェクトの配列またはリストを取得しようとしている間、それは単一の のみを返します。これどうやってするの?

4

3 に答える 3

7

効率的にするには、リストを反復処理して、すべての最大要素を自分で見つける必要があります。

List<Employee> result = new ArrayList<>();
Employee currentMax = null;
for (Employee e : list) {
    if (currentMax == null || e.compareTo(currentMax) > 0) {
        currentMax = e;
        result.clear();
        result.add(e);
    }
    else if (currentMax!= null && e.compareTo(currentMax) == 0) {
        result.add(e);
    }
}

このソリューションは O(n) であり、リストを 1 回通過する必要があります。

于 2013-08-18T13:02:39.507 に答える
0

これを試して:

Collections.sort(list);
Collections.reverse(list);
Set<Employee> highest = new HashSet<Employee>();
Employee max = list.get(0);
for (Employee employee : list) {
    if (e.compareTo(max) < 0) break;
    highest.add(employee);
}

重複があってはならないので、セットを選択しました。

于 2013-08-18T12:51:58.567 に答える
-1
Employee max=Collections.max(employeeList);
List <Employee> maxEmployeeList=new ArrayList<Employee>();
maxEmployeeList.add(max);
for(Employee e:employeeList){
  if(e.equals(max)){
   maxEmployeeList.add(e);
  }
}
于 2013-08-18T12:43:44.320 に答える