2017-03-23 8 views
-1
public Map<String, List<Tuple4>> buildTestcases(ArrayList<Tuple4> list){ 
     Map<String, List<Tuple4>> map = new LinkedHashMap<String, List<Tuple4>>(); 


     for(Tuple4 element: list){ 

      String[] token = element.c.split("\\s"); 

       if (!map.containsKey(token[1])) { 
        map.put(token[1], new ArrayList<Tuple4>()); 
       } 
      map.get(token[1]).add(element); 
     } 
     System.out.println(map); 

     return map; 
    } 

public Tuple4(String a, String b, String c, String d) { 
     this.a = a; 
     this.b = b; 
     this.c = c; 
     this.d = d; 
    } 

특정 일치하는 테스트 케이스에 대해 테스트를 구성하고 있습니다. 이제 나는 그것을에서 dynamicTest를 구성하고있어 이후 배열로 변환 할 : 같은 배열로 변환하는 방법은 없나요지도로 변환 Java

return Stream.of(<Array needed>).map(


      tuple -> DynamicTest.dynamicTest("Testcase: ",() -> { ... } 

Object[String][Tuple4]

편집 :

자,이 코드를 가지고 있습니다 :

`@TestFactory public Stream dynamicTuple4TestsFromStream() throws IOException { initialize();

return map.entrySet().stream() 
     .flatMap(entry -> 
       entry.getValue().stream() 
         .map(s -> new AbstractMap.SimpleEntry<>(entry.getKey(), s))) 
     .forEach(e -> DynamicTest.dynamicTest("Testcase: " +e.getKey(),() -> { 
      tester = new XQueryTester(e.getValue().a, e.getValue().b); 
      if(e.getValue().c.contains("PAY")){ 
       Assert.assertTrue(tester.testBody(e.getValue().c,e.getValue().d)); 

      } 

     })); }` 

및 메신저이 예외를 받고 : incompatible types: void cannot be converted to java.util.stream.Stream<org.junit.jupiter.api.DynamicTest>

어떻게/왜?

+0

'객체 [문자열] [Tuple4]'를? - Java 배열의 스펙으로 인식하지 못합니다. Java 배열은 int로 인덱스됩니다. – slim

+0

그래, 미안해. 분명히 거기에 있지 않았다. 나는 첫 번째 인덱스에 저장된 문자열이 있고 두 번째 튜플에 문자열이 있다는 것을 의미한다. – Hendrik

+0

'forEach()'는'Consumer '을 취합니다 - void를 반환하는 하나의 매개 변수가있는 함수입니다. 'Function >'을 전달 했으므로 불만을 나타냅니다. "추출 방법"을 사용하여 더 간단한 방법을 만드는 것처럼 작은 함수를 작성하고 변수에 할당하면이 코드를 더 쉽게 읽을 수 있습니다. – slim

답변

0

지도를 배열로 변환하는 코드를 비교적 쉽게 작성할 수 있지만 테스트 스트림을 얻으려고 할 필요는 없습니다. 물론

Greeting Hello 
Greeting World 
Farewell Goodbye 
Farewell Suckers 

경우 ...

Map<String, List<String>> map = new HashMap<>(); 
    map.put("Greeting", Arrays.asList("Hello", "World")); 
    map.put("Farewell", Arrays.asList("Goodbye", "Suckers")); 

    map.entrySet().stream() 
      .flatMap(entry -> 
        entry.getValue().stream() 
          .map(s -> new AbstractMap.SimpleEntry<>(entry.getKey(), s))) 
      .forEach(e -> System.out.println(e.getKey() + " " + e.getValue())); 

... 인쇄 :

당신은 Map.Entry<String,List<Tuple>>의 스트림을 취득하고, 예를 들어 Map.Entry<String,Tuple>

의 스트림으로 평평 필요 당신 정말 배열을 원한다면 매핑을 바꿀 수 있습니다 :

.flatMap(entry -> entry.getValue().stream() 
     .map(s -> new Object[] { entry.getKey(), entry.getValue() }) 

... 배열의 결과 스트림을 배열 배열로 수집합니다. 그러나 나는 그 요점을 보지 못한다.

는 (이 기능 분해의 리팩토링에서 도움이 될,하지만 포인트 설명)

+0

내 질문이 업데이트되었습니다. 검토 할 수 있으면 좋을 것입니다. – Hendrik