Użyj tego tagu w przypadku pytań związanych z korzystaniem z interfejsu API Stream. Został wprowadzony w Javie 8 i obsługuje operacje w stylu funkcjonalnym na strumieniach wartości, takich jak potoki filtruj-mapuj-zmniejszaj w kolekcjach.
W Javie 8 mamy klasę Stream <T> , która, co ciekawe, ma metodę Iterator<T> iterator() Można się więc spodziewać, że zaimplementuje interfejs Iterable <T> , który wymaga dokładnie tej metody, ale tak nie jest. Kiedy chcę iterować po strumieniu za pomocą pętli foreach, muszę zrobić coś takiego public static Iterable<T> …
Chciałbym użyć java.util.Optional.orElseThrow() z typem wyjątku, który prosi o parametr konstruktora. Coś takiego: .orElseThrow(MyException::new(someArgument)) // obviously NOT working Czy istnieje sposób utworzenia dostawcy, który przekazuje moją wartość argumentu?
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress)); Dostaję się, java.lang.IllegalStateException: Duplicate keygdy zostanie znaleziony zduplikowany element. Czy można zignorować taki wyjątek podczas dodawania wartości do mapy? W przypadku duplikatu należy po prostu kontynuować ignorowanie tego duplikatu klucza.
Zastanawiam się, dlaczego Iterableinterfejs nie zapewnia metod stream()i parallelStream(). Rozważ następującą klasę: public class Hand implements Iterable<Card> { private final List<Card> list = new ArrayList<>(); private final int capacity; //... @Override public Iterator<Card> iterator() { return list.iterator(); } } Jest to realizacja ręku jak można mieć karty w ręku podczas …
Czy masz dostęp do stosu w przepełnieniu stosu w środowisku : Java w wersji 8, w języku angielskim - Function.identity () или t-> t? Mam pytanie dotyczące zastosowania Function.identity()metody. Wyobraź sobie następujący kod: Arrays.asList("a", "b", "c") .stream() .map(Function.identity()) // <- This, .map(str -> str) // <- is the same as …
Nowa struktura strumieniowa Java 8 i znajomi tworzą bardzo zwięzły kod java, ale natknąłem się na pozornie prostą sytuację, której wykonanie jest trudne. Zastanów się nad List<Thing> thingsmetodą i Optional<Other> resolve(Thing thing). Chcę zmapować Things do Optional<Other>s i uzyskać pierwszy Other. Oczywistym rozwiązaniem byłoby użycie things.stream().flatMap(this::resolve).findFirst(), ale flatMapwymaga zwrotu strumienia …
W przeciwieństwie do C # IEnumerable, gdzie potok wykonania może być wykonywany tyle razy, ile chcemy, w Javie strumień można „iterować” tylko raz. Każde wywołanie operacji terminalowej zamyka strumień, co czyni go bezużytecznym. Ta „funkcja” zabiera dużo energii. Wyobrażam sobie, że powód tego nie jest techniczny. Jakie były uwagi projektowe …
Czasami chcesz filtrować Streamz więcej niż jednym warunkiem: myList.stream().filter(x -> x.size() > 10).filter(x -> x.isCool()) ... lub możesz zrobić to samo ze złożonym warunkiem i jednym filter : myList.stream().filter(x -> x.size() > 10 && x -> x.isCool()) ... Domyślam się, że drugie podejście ma lepszą charakterystykę wydajności, ale nie wiem …
Próbuję użyć Java 8 Streamdo znalezienia elementów w LinkedList. Chcę jednak zagwarantować, że istnieje jedno i tylko jedno dopasowanie do kryteriów filtru. Weź ten kod: public static void main(String[] args) { LinkedList<User> users = new LinkedList<>(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -> …
Uwaga: to pytanie pochodzi z martwego linku, który był poprzednim pytaniem SO, ale tutaj idzie ... Zobacz ten kod ( uwaga: wiem, że ten kod nie będzie „działał” i że Integer::comparenależy go użyć - właśnie wyodrębniłem go z połączonego pytania ): final ArrayList <Integer> list = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList()); System.out.println(list.stream().max(Integer::max).get()); System.out.println(list.stream().min(Integer::min).get()); …
W Javie jest wiele przydatnych nowych rzeczy. Np. Mogę iterować ze strumieniem nad listą obiektów, a następnie sumować wartości z określonego pola Objectinstancji. Na przykład public class AClass { private int value; public int getValue() { return value; } } Integer sum = list.stream().mapToInt(AClass::getValue).sum(); Dlatego pytam, czy jest jakiś sposób …
Właśnie odkryłem nowe możliwości strumienia Java 8. Pochodząc z Pythona, zastanawiałem się, czy istnieje teraz dobry sposób na wykonywanie operacji na tablicach, takich jak sumowanie, mnożenie dwóch tablic w sposób „pythonowy” w jednej linii? Dzięki
Mam listę, w myListToParsektórej chcę filtrować elementy, zastosować metodę do każdego elementu i dodać wynik do innej listy myFinalList. W Javie 8 zauważyłem, że mogę to zrobić na 2 różne sposoby. Chciałbym poznać bardziej skuteczny sposób między nimi i zrozumieć, dlaczego jeden sposób jest lepszy od drugiego. Jestem otwarty na …
Czy istnieje operacja strumienia Java 8, która ogranicza (potencjalnie nieskończony), Streamdopóki pierwszy element nie dopasuje predykatu? W Javie 9 możemy użyć takeWhilejak w poniższym przykładzie, aby wydrukować wszystkie liczby mniejsze niż 10. IntStream .iterate(1, n -> n + 1) .takeWhile(n -> n < 10) .forEach(System.out::println); Ponieważ w Javie 8 nie …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.