2014-04-21 3 views
0

나는 자바 8 람다를 뒤범벅하고 있으며 다음과 같은 작업을 시도하고 있지만 명백하게 뭔가 잘못하고있다. 나는 문자열 String [] q 배열을 가지고 배열의 각 요소에 대해 Node 개체 집합을 반환하는 정적 메서드를 호출하려고했습니다.자바에서 람다 테스트하기 8

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

getAllPredicates 인수로 문자열을 받아 들여 Set<Node> 내가 java.util.function를 사용해야합니까 반환하는 방법입니다 : 여기 은 내가 쓴 무엇인가? 모든 제안을 부탁드립니다.

+0

'getAllPredicates'는 정적 메소드입니다. 맞습니까? – Joffrey

답변

3

그래서 : .map(InMemoryGraph::getAllPredicates)

  • 를하고 세트에 그 세트를 수집 한 다음 노드의 세트에 각각의 문자열을 매핑 할 Arrays.stream(q)
  • 을 :

    • 당신은 당신이 스트리밍하려는 배열을 가지고 : .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'는 그 클래스에있는 public static 메쏘드입니다. 어떤 아이디어? –

    +0

    어쩌면 클래스를 가져올 필요가 있습니까? – assylias

    +0

    동등한 람다 :'.map (s -> InMemoryGraph.getAllPredicates (s))'을 시도해보고 어떤 메시지가 나왔는지 알 수 있습니다. 메소드 서명이'public static Set getAllPredicates (String s)'인지 확인할 수 있습니까? – assylias