2014-04-21 3 views
0

Я возился с Java 8 лямбдой, и я пытался сделать следующее, но, видимо, я делаю что-то очень не так. У меня есть массив строки String [] q, и я пытался вызвать статический метод, который возвращает набор объектов Node для каждого элемента массива. Вот что я написал:Тестирование Лямбда в Java 8

Set<Set<Node>> sets = Arrays.asList(q).stream().forEach(InMemoryGraph::getAllPredicates); 

getAllPredicates является метод, который принимает строку в качестве аргумента и возвращает Set<Node> мне нужно использовать java.util.function ли? Любое предложение приветствуется.

+0

Чтобы быть уверенным, 'getAllPredicates' является статическим методом, не так ли? – Joffrey

ответ

3

Итак:

  • у вас есть массив, который вы хотите, чтобы поток: Arrays.stream(q)
  • , то вы хотите отобразить каждую строку набора узлов: .map(InMemoryGraph::getAllPredicates)
  • и собирать эти наборы в комплекте : .collect(toSet());

на одном дыхании:

Set<Set<Node>> sets = Arrays.stream(q) //a Stream<String> 
         .map(InMemoryGraph::getAllPredicates) // a Stream<Set<Node>> 
         .collect(toSet()); // a Set<Set<Node>> 

Примечание: вам нужен статический импорт Collectors.toSet.

+0

Как-то компилятор не любит 'InMemoryGraph :: getAllPredicates', он продолжает запрашивать локальную переменную или поле с именем' InMemoryGraph', которое является именем класса. 'getAllPredicates' является общедоступным статическим методом в этом классе. Есть идеи? –

+0

Вам нужно импортировать класс, возможно? – assylias

+0

Вы также можете попробовать эквивалентную лямбда: '.map (s -> InMemoryGraph.getAllPredicates (s))' и посмотреть, какое сообщение вы получите. Можете ли вы подтвердить, что подпись метода является 'public static Set getAllPredicates (String s)'? – assylias

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