Какъв е класът на препратките към методите?

Имам следния код:

List<Person> personList = getPersons();    
List<Function<List<Person>, Stream<Person>>> streams = new ArrayList<>();
streams.add(p -> p.stream());
streams.add(p -> p.parallelStream());

Intellij Idea предполага, че трябва да заменя ламбда изразите с препратки към методи. Бих искал да го направя, но не съм сигурен какъв трябва да бъде новият общ тип на списъка с потоци. Опитах се да оценя израза personList::stream, но получавам „Няма такова поле за екземпляр: „поток““. Ако опитам List::stream или ArrayList::stream (Конкретният тип на списъка с лица), получавам: „Няма такова статично поле: „поток““. Има ли начин да добавите препратки към метод към списък? ако е така, какъв трябва да бъде общият тип на списъка?

Благодаря

Както assylias посочи, IDEA просто се оплакваше и кодът се изпълняваше без проблем, все още имах проблеми със същия код в IDEA 13, тъй като streams.add очакваше функция, която връща Stream, а List::stream връща Stream. За да го разреша, в крайна сметка използвах следния код:

List<Person> personList = getPersons();
List<Supplier<Stream<Person>>> streams = new ArrayList<>();
streams.add(personList::stream);
streams.add(personList::parallelStream);

person sagioto    schedule 28.01.2014    source източник


Отговори (2)


Това се компилира добре (b119):

List<String> personList = Arrays.asList("a", "b");
List<Function<List<String>, Stream<String>>> streams = new ArrayList<>();
streams.add(List::stream);
streams.add(List::parallelStream);

Може да използвате стара компилация на jdk или IntelliJ се бърка с вас!

person assylias    schedule 28.01.2014
comment
Благодаря, използвам b124 и IDEA 12.1.6. Както казахте, IDEA просто се оплаква, но този код работи добре. - person sagioto; 29.01.2014
comment
Видях същия проблем в IDA 13.1.6. Същият ред от код в режима на кодов фрагмент на дебъгера дава фалшива грешка No such static method; въпреки че кодът работи добре. - person Jason D; 30.09.2015

personList::stream е основно същото като p -> p.stream(). Нито един от тях няма тип сам по себе си. Типът на израза е типът на контекста, който го приема.

person newacct    schedule 29.01.2014