Подскажите, а как его использовать можно?
Для сортировки list из элементов Soldier.
В классе CustomizedComparator vararg надо заменить на comparators;
package com.javarush.task.task26.task2603;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/*
Убежденному убеждать других не трудно
*/
public class Solution {
public static void main(String[] args) {
Comparator<Soldier> compareByName = new Comparator<Soldier>() {
public int compare(Soldier o1, Soldier o2) {
return o1.name.compareTo(o2.name);
}
};
Comparator<Soldier> compareBySurName = new Comparator<Soldier>() {
public int compare(Soldier o1, Soldier o2) {
return o1.surName.compareTo(o2.surName);
}
};
Comparator<Soldier> compareByWeight = new Comparator<Soldier>() {
public int compare(Soldier o1, Soldier o2) {
return o1.compareTo(o2);
}
};
Soldier s1 = new Soldier("1","2",10);
Soldier s2 = new Soldier("5","8",5);
Soldier s3 = new Soldier("5","7",50);
Soldier s4 = new Soldier("1","6",15);
List<Soldier> list = new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
for (Soldier soldier:list){
System.out.format("%s %s %d",soldier.name,soldier.surName,soldier.weight);
System.out.println();
}
CustomizedComparator<Soldier> cc = new CustomizedComparator<>(compareByName,compareBySurName,compareByWeight);
for (Soldier soldier:list){
System.out.format("%s %s %d",soldier.name,soldier.surName,soldier.weight);
System.out.println();
}
}
public static class CustomizedComparator<T> implements Comparator<T>{
private Comparator<T>[] comparators;
public CustomizedComparator(Comparator<T> ... vararg) {
this.comparators = comparators;
}
@Override
public int compare(T o1, T o2) {
int result = 0;
for (Comparator comparator : comparators) {
result = comparator.compare(o1, o2);
if (result != 0) {
break;
}
}
return result;
}
}
public static class Soldier implements Comparable<Soldier>{
private String name;
private String surName;
private int weight;
public Soldier(String name,String surName,int weight) {
this.name = name;
this.surName = surName;
this.weight = weight;
}
@Override
public int compareTo(Soldier o) {
return o.weight-this.weight;
}
}
}