Java 8, akışları daha iyi sıralamamıza yardımcı olmak için farklı yardımcı program api yöntemleri sağlar.
Listeniz Tamsayılar (veya Double, Long, String vb.) Listesiyse, listeyi java tarafından sağlanan varsayılan karşılaştırıcılarla sıralayabilirsiniz.
List<Integer> integerList = Arrays.asList(1, 4, 3, 4, 5);
Anında karşılaştırıcı oluşturma:
integerList.stream().sorted((i1, i2) -> i1.compareTo(i2)).forEach(System.out::println);
Sıralı () öğesine hiçbir argüman iletilmediğinde java 8 tarafından sağlanan varsayılan karşılaştırıcı ile:
integerList.stream().sorted().forEach(System.out::println);
Aynı listeyi tersine sıralamak istiyorsanız:
integerList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
Listeniz kullanıcı tanımlı nesnelerin bir listesiyse, o zaman:
List<Person> personList = Arrays.asList(new Person(1000, "First", 25, 30000),
new Person(2000, "Second", 30, 45000),
new Person(3000, "Third", 35, 25000));
Anında karşılaştırıcı oluşturma:
personList.stream().sorted((p1, p2) -> ((Long)p1.getPersonId()).compareTo(p2.getPersonId()))
.forEach(person -> System.out.println(person.getName()));
Comparator.comparingLong () yöntemini kullanarak (ComparingDouble (), Int () yöntemlerini de karşılaştırıyoruz):
personList.stream().sorted(Comparator.comparingLong(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
Comparator.comparing () yöntemini kullanma (Sağlanan alıcı yöntemine göre karşılaştıran genel yöntem):
personList.stream().sorted(Comparator.comparing(Person::getPersonId)).forEach(person -> System.out.println(person.getName()));
ThenComparing () yöntemini kullanarak zincirleme de yapabiliriz:
personList.stream().sorted(Comparator.comparing(Person::getPersonId).thenComparing(Person::getAge)).forEach(person -> System.out.println(person.getName()));
Kişi sınıfı
public class Person {
private long personId;
private String name;
private int age;
private double salary;
public long getPersonId() {
return personId;
}
public void setPersonId(long personId) {
this.personId = personId;
}
public Person(long personId, String name, int age, double salary) {
this.personId = personId;
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
list.sort(Comparator.comparing(o -> o.getItem().getValue()));
benim için yeniydi. Harika!