01/10/2018, 15:48
Sắp xêp dựa trên nhiều tiêu chí trong java
Có bài toán như sau:
Tronh đó tiêu chí săp sếp dự trên 3 yêu tố: điểm, hiệu số bàn thắng, số bàn thắng.
Có cách làm như sau để cho anh em dễ mở rộng sau này(dùng Comparator):
Tạo class PointComparator(so sánh dự trên điểm)
package pet.utils;
import java.util.Comparator;
import pet.obj.FootballClub;
// TODO: Auto-generated Javadoc
/**
* The Class PointComparator.
*
* @author NGUYENCA
*/
public class PointComparator implements Comparator<FootballClub> {
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(FootballClub o1, FootballClub o2) {
return o2.getStandingData().getPoint() - o1.getStandingData().getPoint();
}
}
class GoalDifComparator(hiệu số)
package pet.utils;
import java.util.Comparator;
import pet.obj.FootballClub;
// TODO: Auto-generated Javadoc
/**
* The Class GoalDifComparator.
*
* @author NGUYENCA
*/
public class GoalDifComparator implements Comparator<FootballClub> {
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(FootballClub o1, FootballClub o2) {
return o2.getStandingData().getGoalDif() - o1.getStandingData().getGoalDif();
}
}
class GoalForComparator(bàn thắng)
package pet.utils;
import java.util.Comparator;
import pet.obj.FootballClub;
// TODO: Auto-generated Javadoc
/**
* The Class GoalForComparator.
*
* @author NGUYENCA
*/
public class GoalForComparator implements Comparator<FootballClub> {
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(FootballClub o1, FootballClub o2) {
return o2.getStandingData().getGoalFor() - o1.getStandingData().getGoalFor();
}
}
Sau đó viết một class mới để control việt sử dùng 3 tiêu chí săp sếp trên:
class FootballClubChainedComparator
package pet.utils;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import pet.obj.FootballClub;
// TODO: Auto-generated Javadoc
/**
* The Class FootballClubChainedComparator.
*
* @author NGUYENCA
*/
public class FootballClubChainedComparator implements Comparator<FootballClub> {
/** The list comparators. */
private List<Comparator<FootballClub>> listComparators;
/**
* Instantiates a new football club chained comparator.
*
* @param comparators the comparators
*/
@SafeVarargs
public FootballClubChainedComparator(Comparator<FootballClub>... comparators) {
this.listComparators = Arrays.asList(comparators);
}
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(FootballClub o1, FootballClub o2) {
for (Comparator<FootballClub> comparator : listComparators) {
int result = comparator.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
}
Ở đây thực chất chỉ loop trên arrayList chứa các tiêu chi săp xếp có kiểu Comparator<FootballClub.
Cách gọi như dưới:
Collections.sort(footballClubs, new FootballClubChainedComparator(new PointComparator(),
new GoalDifComparator(), new GoalForComparator()));
Chúc anh em cuối tuần vui
Bài liên quan