Giriş
sorted() metodunun iki tane overload edilmiş hali var.
sorted() metodunun iki tane overload edilmiş hali var.
1. Natural Order'a göre sıralayan. Elemanların Comparable olması gerekir.
2. Parametre olarak Comparator alan
sorted metodu
İmzası şöyle
İmzası şöyle
Stream<T> sorted();
Açıklaması şöyle.Returns a stream consisting of the elements of this stream, sorted according to natural order. If the elements of this stream are not Comparable, a java.lang.ClassCastException may be thrown when the terminal operation is executed.
Örnek
sorted() ile çağrılan nesnenin Comparable olması gerekir. Yoksa şu exception fırlatılır.
Şöyle yaparız.
Elimizde şöyle bir Map olsun.
sorted() ile çağrılan nesnenin Comparable olması gerekir. Yoksa şu exception fırlatılır.
Exception in thread "main" java.lang.ClassCastException:
Foo cannot be cast to java.lang.Comparable
ÖrnekŞöyle yaparız.
final List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
list.stream()
.filter(i -> i > 5)
.sorted()
.forEach(list::remove);
System.out.println(list); // Prints [0, 1, 2, 3, 4, 5]
ÖrnekElimizde şöyle bir Map olsun.
Map<Long, Test> map = new HashMap<Long, Test>();
Test sınıfının en büyük number alanına sahip olanını bulmak için şöyle yaparız.Entry<Long, Test> entry = map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.comparing(Test::getNumber,
Comparator.reverseOrder())))
.findFirst()
.get();
Diğer
sorted() metodu orijinal veriyapısı üzerinde çalışabilir veya çalışmayabilir. Bu konuda bir garanti verilmiyor. Dolayısıyla şu açıklama doğru değil.
Aşağıdaki kod ConcurrentModificationException fırlatır.
sorted() metodu orijinal veriyapısı üzerinde çalışabilir veya çalışmayabilir. Bu konuda bir garanti verilmiyor. Dolayısıyla şu açıklama doğru değil.
ÖrnekThe sorted() operation is a “stateful intermediate operation”, which means that subsequent operations no longer operate on the backing collection, but on an internal state.
Aşağıdaki kod ConcurrentModificationException fırlatır.
Set<Integer> set = IntStream.range(0, 10).boxed()
.collect(Collectors.toCollection(TreeSet::new));
set.stream()
.filter(i -> i > 5)
.sorted()
.forEach(set::remove);
sorted metodu - Comparator
Örnek
Şöyle yaparız
Stream<String> stream = stringCollection.stream().sorted(Comparator.naturalOrder());
Örnek
Elimizde şöyle bir kod olsun
List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
Şöyle yaparız.
list.stream()
.map(n -> n.toLowerCase())
.sorted(Comparator.comparingInt(String::length))
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
.forEachOrdered(n -> System.out.println(n));
Keep in mind that forEach makes no ordering guaranties, so to be sure to see the elements in the sorted order, you have to use forEachOrdered
Hiç yorum yok:
Yorum Gönder