Возвращает список одного элемента, если условие фильтра потока не возвращает результатов

В настоящее время я фильтрую поток, но если фильтр не возвращает совпадений, я бы хотел вернуть одно значение по умолчанию. Это внутри цепочки дополнительных потоков, поэтому я использую это, чтобы избежать остановки цепочки, если один шаг не дал результатов.

В настоящее время я обманываю его, собирая результат фильтра в список. Если список пуст, создайте новый список по умолчанию и верните его в виде потока. Если список не пустой, преобразуйте результат обратно в поток, чтобы передать его обратно.

Что является более потоковым способом для достижения этой цели без необходимости переходить в списки и обратно в потоки?

4 голоса | спросил TownCube 13 Maypm18 2018, 15:23:15

2 ответа


0
Из того, что я понимаю, вы хотите метод, похожий на DefaultIfEmpty в C #.К сожалению, в Stream API такого метода нет, но, к счастью, кто-то уже реализовал что-то подобное.Используя метод ---- +: = 0 =: + ---- из ответа @Stuart Marks, сценарий использования довольно прост.Например, предположим, у вас есть список целых чисел:и вам нужен поток с одним значением, если в вышеупомянутом списке нет четных чисел.Вариант использования будет:Это даст ---- +: = 4 =: + ---- с одним элементом, являющимся ---- +: = 5 =: + ---- как ---- +: = 6 =: + ---- операция вернула пустой поток.затем вы можете связать дальнейшие операции в потоке, возвращенном из ---- +: = 7 =: + ---- т.е.или применить последующие ---- +: = 9 =: + ---- методы к:В этот момент вы, вероятно, поймете, что читаемость теряется, и это будет иметь место, когда вы будете выполнять дальнейшие операции.Тем не менее, это наилучший из возможных способов, так как я не могу придумать какой-либо другой способ сделать это, поддерживая хорошую читабельность, поскольку вы создаете все больше и больше методов в потоке.
ответил Aomine 13 Maypm18 2018, 16:34:12
0
Лучшее решение, позволяющее избежать необходимости собирать весь поток, избегать потери исходных характеристик ---- +: = 0 =: + ---- и сохранить (большую часть) его оптимизации, - это реализовать пользовательские ----+: = 1 =: + ----, который обрабатывает значение по умолчанию в случае, если исходный поток ---- +: = 2 =: + ---- пуст:Пример использования:Выход:
ответил Didier L 13 Maypm18 2018, 23:13:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132