Использование двойного двоеточия для объекта, на который ссылается метод Java 8 - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть 2 List<xxx> и необходимость пересечения им от xxx.getId(), поэтому я использую Stream и Lambda. Эти шаги:

List<xxx> list1 = function1();
List<xxx> list2 = function2();
List<String> list1InString = list1.stream().map(input -> input.getId()).collect(toList());
list2 = list2.stream().filter(input -> list1InString.contains(input.getId())).collect(toList());

Я хочу сделать это с помощью double colon, например:

list2 = list2.stream().filter(list1InString::contains).collect(toList());

Но это не так, потому что contains ссылка наххй объект не Строка GetId () метод. Я знаю, что тратить время, чтобы преобразовать list1 в list1InString, но я не знаю лучшего способа. Любая помощь очень ценна, спасибо большое.
1016 * Edit: Спасибо за ответ много, я просто хочу, чтобы сделать код более простым с помощью двойного двоеточия (который является новым для меня), но в этом случае не может использовать. Отдельное спасибо Наману и Хольгеру за разъяснение моей проблемы.

1 Ответ

2 голосов
/ 11 декабря 2019

Вы можете принять альтернативный подход, как показано ниже:

List<XXX> items = list2.stream()
            .map(itemL1->{
                        return list1.stream().
                            filter((itemL2)->itemL2.getId().equals(itemL1.getId()))
                            .collect(Collectors.toList());
                    }
                )
            .flatMap(List::stream)
            .collect(Collectors.toList());
...