Wpis z mikrobloga

Nie tylko streamów. To bajer czegokolwiek co deklaruje, że zwracanym typem jest interfejs.


@sorhu: No tak, po to generalnie są, natomiast tutaj wydaje mi to byc "bardziej" bez znaczenia, bo caly bajer streamow polega na opisaniu operacji, ktore wrecz moga nigdy nie zostac wykonane.
@grizzly_joe: akurat stwierdzenie, że Ciebie nie powinno interesować co dostajesz w wyniku jest dosyć odważne. LinkedLista, ArrayLista, tak samo HashSet, TreeSet mają różne specyficzne cechy, różną złożoność obliczeniową różnych operacji i ponieważ nie są to kolekcje immutable, to zapewne coś na niej później będziesz robił i jak najbardziej powinno Cię interesować, czy nie lepiej będzie skorzystać np. z Collectors.toCollection.
Polecam zaglądać do źródeł na grepcode.
jaka akurat collector uzna za stosowną


@M4ks: no chyba nie :)

@grizzly_joe:
Collectors.toSet() - > HashSet
Collectors.toList() -> ArrayList
Collectors.toMap() -> HashMap

Stream.of(args)


@sorhu:
a dlaczego nie Arrays.stream(args) ?
@afe1:
Gdzie masz to napisane, że akurat takie implementacje zwraca?

Obie metody robią to samo, ale wg mnie Stream.of ładniej wygląda w kodzie.
TreeSet mają różne specyficzne cechy, różną złożoność obliczeniową różnych operacji i ponieważ nie są to kolekcje immutable, to zapewne coś na niej później będziesz robił i jak najbardziej powinno Cię interesować, czy nie lepiej będzie skorzystać np. z Collectors.toCollection.


@Eoghan: cala idea streams polega na tym, ze definiujesz dzialanie a nie implementacje i rola Collectora jest wybranie najlepszego w danym momencie typu. Jak zrobisz stream parallel to juz wcale ArrayList taki
@M4ks: @afe1: @sorhu: To że widzisz że w źródłach nie zwraca, to nie znaczy że kiedyś się to nie zmieni, więc jak chcesz ArrayList to musisz ten typ sprawdzić lub new ArrayList(lista).
Co prawda pewnie się nie zmieni... ale pisz poprawnie...

There are no guarantees on the type, mutability, serializability, or thread-safety of the List returned;

Z javadocs twojej metody ( ͡º ͜ʖ͡º)
Co prawda pewnie się nie zmieni... ale pisz poprawnie...


@GotoFinal: Zreszta funkcja zwraca List<>, zeby zrobic z tego ArrayList<> to musisz upcastowac, a to juz wyrazny code-smell..
@M4ks: Nie musi upcastować. Może napisać new ArrayList(cośtam).
No, ale jak ma coś takiego robić, to lepiej użyć Collectors.toCollection.