Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
Ребят такой вопрос возможно ли в рамках одного стрима осуществить проверку вот такую как на фото
сейчас у меня два раза создается стрим( что не есть хорошо)
что должна сделать проверка прочекать коллекцию и если в ней нет этих двух элементов - выдать true
если нет двух false если есть один а другого нет тоже false

все как на картинке ,только в рамках одного стрима

К сообщению приложен файл. Размер - 20Kb
29 апр 20, 15:50    [22125005]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
chpasha
Member

Откуда:
Сообщений: 9207
первое пришедшее в голову решение (ну если охота на стримах) в виде концепта
.map(Property::getPropertyType)
.filter(equals(X) || equals(Y))
.collect(toSet())
.size() != 2

с точки зрения производительности не анализировал

Сообщение было отредактировано: 29 апр 20, 16:00
29 апр 20, 16:00    [22125018]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
Zzz79
Ребят такой вопрос возможно ли в рамках одного стрима осуществить проверку вот такую как на фото
сейчас у меня два раза создается стрим( что не есть хорошо)
что должна сделать проверка прочекать коллекцию и если в ней нет этих двух элементов - выдать true
если нет двух false если есть один а другого нет тоже false

все как на картинке ,только в рамках одного стрима


Твой код делает абсолютно другое. True вернется в трех случаях - 1) Если коллекция содержит больше 2 элементов ИЛИ 2) не содержит элемента с propertyType = PROPERTY_AUTO ИЛИ 3) коллекция не содержит элемента с propertyType = PROPERTY_TYPE

Так что сначала обьясни что надо
29 апр 20, 16:02    [22125021]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
chpasha
первое попавшееся в голову решение (ну если охота на стримах) в виде концепта
.map(Property::getPropertyType)
.filter(equals(X) || equals(Y))
.collect(toSet())
.size() != 2

с точки зрения производительности не анализировал

не получится так - он найдет первое значение и на этом все закончится ,set.size всегда будет равен не больше 1
29 апр 20, 16:03    [22125024]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
chpasha
первое пришедшее в голову решение (ну если охота на стримах) в виде концепта
.map(Property::getPropertyType)
.filter(equals(X) || equals(Y))
.collect(toSet())
.size() != 2

с точки зрения производительности не анализировал

На бесконечных стримах не взлетит. Насколько я понимаю ТС - ему интересен именно ранний выход(иначе устроил бы и лист), хотя он конечно турок тот еще
29 апр 20, 16:03    [22125025]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
Zzz79
chpasha
первое попавшееся в голову решение (ну если охота на стримах) в виде концепта
.map(Property::getPropertyType)
.filter(equals(X) || equals(Y))
.collect(toSet())
.size() != 2

с точки зрения производительности не анализировал

не получится так - он найдет первое значение и на этом все закончится ,set.size всегда будет равен не больше 1

В смысле не получится? Collect() не заметил?
29 апр 20, 16:05    [22125027]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
забыл ник
Zzz79
Ребят такой вопрос возможно ли в рамках одного стрима осуществить проверку вот такую как на фото
сейчас у меня два раза создается стрим( что не есть хорошо)
что должна сделать проверка прочекать коллекцию и если в ней нет этих двух элементов - выдать true
если нет двух false если есть один а другого нет тоже false

все как на картинке ,только в рамках одного стрима


Твой код делает абсолютно другое. True вернется в трех случаях - 1) Если коллекция содержит больше 2 элементов ИЛИ 2) не содержит элемента с propertyType = PROPERTY_AUTO ИЛИ 3) коллекция не содержит элемента с propertyType = PROPERTY_TYPE

Так что сначала обьясни что надо

нужно сделать все тоже самое только в рамках одного stream,а не двух как сейчас на картинке

сейчас тут происходит как ты и сказал сначала чекается размер входящего листа
если он не 2 - вываливаемся с проверки
дальше шаг если не нашел подходящий элемент вываливаемя если нашел
ищем второй элемент - если нашли вываливаемся ,если нет кидаем исключение)
29 апр 20, 16:05    [22125028]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
забыл ник
chpasha
первое пришедшее в голову решение (ну если охота на стримах) в виде концепта
.map(Property::getPropertyType)
.filter(equals(X) || equals(Y))
.collect(toSet())
.size() != 2

с точки зрения производительности не анализировал

На бесконечных стримах не взлетит. Насколько я понимаю ТС - ему интересен именно ранний выход(иначе устроил бы и лист), хотя он конечно турок тот еще

Туплю, ему все равно ведь надо прочекать всю коллекцию в худшем случае
29 апр 20, 16:07    [22125031]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
chpasha
Member

Откуда:
Сообщений: 9207
Zzz79
не получится так - он найдет первое значение и на этом все закончится

нифига подобного, он оставит все записи PropertyType которых X или Y, а остальные выкинет, после этого оставляем только уникальные и проверяем размер

забыл ник
ему интересен именно ранний выход

да, с точки зрения раннего выхода конечно не оптимально

забыл ник

Туплю, ему все равно ведь надо прочекать всю коллекцию в худшем случае
в худшем конечно, но все равно решение на стримах много всего делает. для коротких коллекций сойдет конечно

Сообщение было отредактировано: 29 апр 20, 16:09
29 апр 20, 16:08    [22125032]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
Zzz79
забыл ник
пропущено...


Твой код делает абсолютно другое. True вернется в трех случаях - 1) Если коллекция содержит больше 2 элементов ИЛИ 2) не содержит элемента с propertyType = PROPERTY_AUTO ИЛИ 3) коллекция не содержит элемента с propertyType = PROPERTY_TYPE

Так что сначала обьясни что надо

нужно сделать все тоже самое только в рамках одного stream,а не двух как сейчас на картинке

сейчас тут происходит как ты и сказал сначала чекается размер входящего листа
если он не 2 - вываливаемся с проверки
дальше шаг если не нашел подходящий элемент вываливаемя если нашел
ищем второй элемент - если нашли вываливаемся ,если нет кидаем исключение)


Почему стрим, почему так? Давай попробуем сформулировать задачу не оторванную от жизни, ну или хотя бы понятную. Какой размер стрима, нужен ли ранний выход, могут ли быть одинаковые объекты в стриме? Почему ограничение size =2? Трудно дать осмысленный ответ когда ты вывалил какую то кучу ограничений, а другие мб не вывалил, сиди догадывайся
29 апр 20, 16:11    [22125037]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
chpasha
Member

Откуда:
Сообщений: 9207
Zzz79
если он не 2 - вываливаемся с проверки

что уже не верно. а если там X, Y, Z - а ты вываливаешься из проверки. на размер <2 разве что можно проверить
29 апр 20, 16:13    [22125039]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
chpasha
Zzz79
не получится так - он найдет первое значение и на этом все закончится

нифига подобного, он оставит все записи PropertyType которых X или Y, а остальные выкинет, после этого оставляем только уникальные и проверяем размер

забыл ник
ему интересен именно ранний выход

да, с точки зрения раннего выхода конечно не оптимально

забыл ник

Туплю, ему все равно ведь надо прочекать всю коллекцию в худшем случае
в худшем конечно, но все равно решение на стримах много всего делает. для коротких коллекций сойдет конечно

хрен его знает не могу проверить,так как оно не компилируется - там ошибка в filter()
29 апр 20, 16:13    [22125040]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
chpasha
Zzz79
если он не 2 - вываливаемся с проверки

что уже не верно. а если там X, Y, Z - а ты вываливаешься из проверки. на размер <2 разве что можно проверить

это бизнес логика- в этом листе всегда должно быть два элемента,если их нет - значит выдать ошибку
29 апр 20, 16:15    [22125043]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
забыл ник
Member

Откуда:
Сообщений: 3289
Опять же если повторяющихся элементов там не может быть(и учитывая что size = 2) то можно ограничиться
stream.anyMatch(f => f != property_TYPE && f != Property_auto)
Хотя в любом случае стрим на два элемента - ну такое...
29 апр 20, 16:16    [22125045]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
забыл ник
Опять же если повторяющихся элементов там не может быть(и учитывая что size = 2) то можно ограничиться
stream.anyMatch(f => f != property_TYPE && f != Property_auto)
Хотя в любом случае стрим на два элемента - ну такое...

так не проходят тесты
29 апр 20, 16:26    [22125053]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
забыл ник
забыл ник
пропущено...

На бесконечных стримах не взлетит. Насколько я понимаю ТС - ему интересен именно ранний выход(иначе устроил бы и лист), хотя он конечно турок тот еще

Туплю, ему все равно ведь надо прочекать всю коллекцию в худшем случае

подходящий варик - тока ты предикат забыл))

а так все тесты прошли,спасибо
29 апр 20, 16:27    [22125054]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
chpasha
Member

Откуда:
Сообщений: 9207
Zzz79
хрен его знает не могу проверить,так как оно не компилируется - там ошибка в filter()
ну я ж говорю, концепт - надо правильно синтаксически записать. там в фильтре лямбда должна быть

Zzz79
в этом листе всегда должно быть два элемента,если их нет - значит выдать ошибку

29 апр 20, 16:29    [22125057]     Ответить | Цитировать Сообщить модератору
 Re: Немного стримов под конец рабочего дня  [new]
Zzz79
Member

Откуда:
Сообщений: 168
chpasha
Zzz79
хрен его знает не могу проверить,так как оно не компилируется - там ошибка в filter()
ну я ж говорю, концепт - надо правильно синтаксически записать. там в фильтре лямбда должна быть

Zzz79
в этом листе всегда должно быть два элемента,если их нет - значит выдать ошибку


все норм щас стало
сначала я чекаю лист на то что там 2 элемента( если не два сразу выхожу и не создаю стрим )
а если два то чекаю по твоему решению и все ок

хорошее решение и красивое))

я щас сидел втыкал не пойму как оно тесты проходит если я в лист кладу два одинаковых элемента-потом смотрю ты их в Set кладешь)
вообщем здорово ,спасибо
29 апр 20, 16:39    [22125069]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить