2015-04-13 2 views
2

Я пытаюсь получить коллекцию объектов, из коллекции с использованием потоков в Java8 на основе некоторого предикатаВерстка java8 потоков, чтобы получить коллекцию с помощью предиката

Вот что я пробовал, но есть какая-то ошибка синтаксиса в этом .:

Collection<object> objectCollectionNew = objectCollection.stream().filter(o -> objectCollection.stream().filter(x- > x.isTrue == o.isTrue)); 

Поэтому в основном я хочу, чтобы получить коллекцию объектов из objectCollection на основе моего предиката. Также я не уверен, как это сделать в моем Collection<object>.

.collect(Collectors.to ??)

Некоторая помощь будет оценена.

+1

Непонятно, чего вы хотите достичь. –

+0

Я хочу сравнить каждый объект в коллекции с любым другим объектом в той же коллекции и на основе моего предиката выводить эту коллекцию. – user000111181

+1

«*, но в этом случае есть синтаксическая ошибка». Можете ли вы опубликовать эту ошибку, чтобы люди с подобной проблемой могли найти ваш вопрос и ответы? – Pshemo

ответ

0

Похоже, вы хотите использовать flatMap:

Collection<object> objectCollectionNew = objectCollection.stream() 
               .flatMap(o -> objectCollection.stream().filter(x -> x.isTrue == o.isTrue)) 
               .collect(Collectors.toList()); 
+0

это все еще дает мне синтаксическую ошибку, которую я получал раньше: 'Синтаксическая ошибка на токене") ", ElidedSemicolonAndRightBrace expected' – user000111181

+0

@RahulRaina Я не получаю синтаксическую ошибку, попробуйте скопировать мой пример напрямую. –

+0

Я удалил круглую скобку после 'isTrue', так как это было вызовом метода. Если это переменная, и вы просто заменили имя, игнорирующее эти скобки, это может быть причиной того, почему вы получаете синтаксическую ошибку. –

1

Это не совсем понятно, что вы пытаетесь сделать, но если вы хотите, чтобы найти все элементы коллекции которого isTrue равно isTrue из какой-либо другой элемент коллекции, вы могли бы сделать это следующим образом:

objectColelction.stream() 
    .filter(o -> objectColelction.stream().anyMatch(x -> x.isTrue == o.isTrue)) 
    .collect(Collectors.toList()); 
0

у меня была аналогичная проблема, которая выглядит как ошибка в синтаксисе парсер Eclipse. Я решил это, добавив скобки

Collection<object> objectCollectionNew = objectCollection.stream() 
.filter(x -> {return x.isTrue == o.isTrue;}) 
.collect(Collectors.toList()); 

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

+1

Что такое переменная 'o' в вашем примере? –

Смежные вопросы