Запитання з тегом «java-stream»

Використовуйте цей тег для питань, пов’язаних із використанням API Stream. Він був введений в Java 8 і підтримує операції в функціональному стилі над потоками значень, такими як фільтр-карта-зменшення трубопроводів для колекцій.

9
Чому Stream <T> не реалізує Iterable <T>?
У Java 8 у нас є клас Stream &lt;T&gt; , у якому цікаво є метод Iterator&lt;T&gt; iterator() Тож ви б очікували, що він реалізує інтерфейс Iterable &lt;T&gt; , який вимагає саме цього методу, але це не так. Коли я хочу повторити потік за допомогою циклу foreach, я повинен зробити щось …

3
Посилання методу Java 8: надайте Постачальник, здатний надати параметризований результат
Я хотів би скористатися java.util.Optional.orElseThrow() з типом винятку, який запитує параметр конструктора. Щось на зразок цього: .orElseThrow(MyException::new(someArgument)) // obviously NOT working Чи є спосіб створити Постачальника, який передає значення мого аргументу?
259 java  java-8  java-stream 

7
Ігноруйте дублікати при створенні карти за допомогою потоків
Map&lt;String, String&gt; phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress)); я отримав java.lang.IllegalStateException: Duplicate key коли знайдений дублюваний елемент. Чи можна ігнорувати такий виняток при додаванні значень на карту? Коли є дублікат, його просто слід продовжувати, ігноруючи цей дублікат ключа.
257 java  java-8  java-stream 

3
Чому Iterable <T> не забезпечує потокові () та паралельніStream () методи?
Мені цікаво, чому Iterableінтерфейс не забезпечує stream()і parallelStream()методи. Розглянемо наступний клас: public class Hand implements Iterable&lt;Card&gt; { private final List&lt;Card&gt; list = new ArrayList&lt;&gt;(); private final int capacity; //... @Override public Iterator&lt;Card&gt; iterator() { return list.iterator(); } } Це реалізація Руки, оскільки ви можете мати картки в руці під час …

3
Лямбди Java 8, Function.identity () або t-> t
У цьому питанні є відповіді на Stack Overflow на російському : Лямбди в Java 8, що найкраще використовувати - Function.identity () або t-&gt; t? У мене є питання щодо використання Function.identity()методу. Уявіть собі наступний код: Arrays.asList("a", "b", "c") .stream() .map(Function.identity()) // &lt;- This, .map(str -&gt; str) // &lt;- is the …

12
Використання додатка Java 8 за допомогою Stream :: flatMap
Новий фреймворк Java 8 і його друзі створюють дуже короткий Java-код, але я натрапив на здавалося-просту ситуацію, яку складно робити стисло. Розглянемо а List&lt;Thing&gt; thingsта метод Optional&lt;Other&gt; resolve(Thing thing). Я хочу скласти карту Things до Optional&lt;Other&gt;s і отримати перше Other. Очевидним рішенням буде використання things.stream().flatMap(this::resolve).findFirst(), але flatMapвимагає повернути потік, і …

5
Чому потоки Java одноразові?
На відміну від C # 's IEnumerable, де конвеєр виконання може бути виконаний стільки разів, скільки ми хочемо, в Java потік можна "повторити" лише один раз. Будь-який дзвінок до операції терміналу закриває потік, роблячи його непридатним. Ця 'особливість' забирає багато сил. Я думаю, що причина цього не є технічною. Які …

4
Потоки Java 8: декілька фільтрів та складних умов
Іноді потрібно фільтрувати а Streamз кількома умовами: myList.stream().filter(x -&gt; x.size() &gt; 10).filter(x -&gt; x.isCool()) ... або ви могли б зробити те ж саме зі складною умовою та єдиним filter : myList.stream().filter(x -&gt; x.size() &gt; 10 &amp;&amp; x -&gt; x.isCool()) ... Я гадаю, що другий підхід має кращі експлуатаційні характеристики, але …

19
Фільтр потоку Java до 1 і лише 1 елемент
Я намагаюся використовувати Java 8 Streams, щоб знайти елементи в LinkedList. Хочу, однак, гарантувати, що є одна і одна відповідність критеріям фільтра. Візьміть цей код: public static void main(String[] args) { LinkedList&lt;User&gt; users = new LinkedList&lt;&gt;(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -&gt; …

5
.Min () і .max () потоків Java 8: чому це компілюється?
Примітка: це запитання походить від мертвого посилання, яке було попереднім питанням SO, але тут іде ... Дивіться цей код ( зауважте: я знаю, що цей код не буде "працювати", і його Integer::compareслід використовувати - я просто витягнув його із пов'язаного питання ): final ArrayList &lt;Integer&gt; list = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList()); System.out.println(list.stream().max(Integer::max).get()); …
215 java  java-8  java-stream 

9
Java8: HashMap <X, Y> в HashMap <X, Z>, використовуючи Stream / Map-Reduce / Collector
Я знаю, як "перетворити" просту Java Listз Y-&gt; Z, тобто: List&lt;String&gt; x; List&lt;Integer&gt; y = x.stream() .map(s -&gt; Integer.parseInt(s)) .collect(Collectors.toList()); Тепер я хотів би зробити те ж саме з картою, тобто: INPUT: { "key1" -&gt; "41", // "41" and "42" "key2" -&gt; "42 // are Strings } OUTPUT: { "key1" …

13
Використання Java 8 для перетворення списку об'єктів у рядок, отриманий методом toString ()
У Java 8. є багато корисних нових речей. Наприклад, я можу повторити потік над списком об'єктів, а потім підсумувати значення з певного поля Objectекземплярів. Напр public class AClass { private int value; public int getValue() { return value; } } Integer sum = list.stream().mapToInt(AClass::getValue).sum(); Таким чином, я запитую, чи є …

4
Потік Java 8 та робота з масивами
Я щойно відкрив нові можливості потоку Java 8. Походячи з Python, мені було цікаво, чи не існує тепер акуратного способу робити операції над масивами, як підсумовування, множення двох масивів "пітонічним" одним рядком? Дякую

8
Java 8 - Найкращий спосіб перетворення списку: карта чи передбачити?
У мене є список, myListToParseде я хочу відфільтрувати елементи і застосувати метод до кожного елемента, а результат додати в інший список myFinalList. З Java 8 я помітив, що я можу це зробити двома різними способами. Я хотів би знати більш ефективний шлях між ними та зрозуміти, чому один із способів …
188 java  java-8  java-stream 

19
Обмежте потік присудком
Чи існує потокова операція Java 8, яка обмежує (потенційно нескінченну), Streamпоки перший елемент не зможе відповідати присудку? У Java 9 ми можемо використовувати, takeWhileяк у наведеному нижче прикладі, для друку всіх цифр менше 10. IntStream .iterate(1, n -&gt; n + 1) .takeWhile(n -&gt; n &lt; 10) .forEach(System.out::println); Оскільки в Java …
187 java  java-8  java-stream 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.