JAVA 8 ve Yukarıdaki Cevap (Lambda İfadeleri Kullanarak)
Java 8'de, bunu daha da kolaylaştırmak için Lambda ifadeleri tanıtıldı! Tüm iskelesi ile bir Comparator () nesnesi oluşturmak yerine, aşağıdaki gibi basitleştirebilirsiniz: (Nesnenizi örnek olarak kullanarak)
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted);
hatta daha kısa:
Collections.sort(list, Comparator.comparingInt(ActiveAlarm ::getterMethod));
Bu tek ifade aşağıdakine eşdeğerdir:
Collections.sort(list, new Comparator<ActiveAlarm>() {
@Override
public int compare(ActiveAlarm a1, ActiveAlarm a2) {
return a1.timeStarted - a2.timeStarted;
}
});
Lambda ifadelerini yalnızca kodun ilgili kısımlarını (yöntem imzası ve döndürülenleri) yerleştirmenizi gerektiriyor olarak düşünün.
Sorunuzun bir başka kısmı, birden çok alanla nasıl karşılaştırılacağıydı. Bunu Lambda ifadeleriyle yapmak için, .thenComparing()
işlevi iki karşılaştırmayı tek bir karşılaştırmada etkili bir şekilde birleştirmek için kullanabilirsiniz :
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.timeStarted-a2.timeStarted
.thenComparing ((ActiveAlarm a1, ActiveAlarm a2) -> a1.timeEnded-a2.timeEnded)
);
Yukarıdaki kod, listeyi önce timeStarted
ve sonra timeEnded
(aynı olan kayıtlar için) göre sıralayacaktır timeStarted
.
Son bir not: 'long' veya 'int' ilkelleri karşılaştırmak kolaydır, sadece birini diğerinden çıkarabilirsiniz. Nesneleri karşılaştırıyorsanız ('Uzun' veya 'Dize'), onların yerleşik karşılaştırmasını kullanmanızı öneririm. Misal:
Collections.sort(list, (ActiveAlarm a1, ActiveAlarm a2) -> a1.name.compareTo(a2.name) );
DÜZENLEME: Bana .thenComparing()
işlev gösterdiği için Lukas Eder'e teşekkürler .