2016-08-03 14 views
-1

Dies ist mein Code. Ich möchte es in Java 8 Stil mit Streams und Lambdas ändern. Kannst du mir helfen?Ändern Sie verschachtelte Schleifen in Stream

Annotation[][] annotations = joinPoint.getTarget().getClass() 
      .getMethod(methodName, signature.getParameterTypes()).getParameterAnnotations(); 

    for (int i = 0; i < parametersCount; i++) { 
     for (int j = 0; j < annotations[i].length; j++) { 
      Annotation annnotation = annotations[i][j]; 
      if (annnotation.annotationType().isAssignableFrom(Hidden.class)) { 
       args.set(i, "***************"); 
      } 
     } 
    } 
+0

Was ist 'args'? – Eran

+0

Warum möchten Sie es ändern? – Andrew

+0

Arraylist verbunden mit Anmerkungen bestellen – lassa

Antwort

0

Ich weiß nicht, was Sie API, sondern ein Übergang des Codes Stream erreichen wollen wie folgt aussieht:

IntStream.range(0, parametersCount).forEach(
    i -> Arrays.stream(annotations[i]) 
       .filter(a -> a.annotationType().isAssignableFrom(Hidden.class)) 
       .forEach(annotation -> args.set(i, "***********")) 
); 
0

Sie können auf folgende Weise schreiben:

// create stream of indices 
IntStream.range(0, parametersCount) 
     // filter it leaving only those which have at least one Hidden annotation 
     .filter(i -> Stream.of(annotations[i]) 
       .anyMatch(a -> a.annotationType().isAssignableFrom(Hidden.class))) 
     // reset the corresponding args 
     .forEach(i -> args.set(i, "***********")); 

Beachten Sie, dass dieses Problem aus folgenden Gründen für Stream API nicht sehr gut geeignet ist:

  1. Sie ändern die vorhandene Datenstruktur. Die Stream-API ist am nützlichsten, wenn Sie mit unveränderlichen Datenstrukturen arbeiten (was etwas Neues erzeugt, anstatt etwas zu verändern).

  2. Sie haben "parallele" Strukturen: erstes Element von args entspricht dem ersten Element von annotations, also tut das zweite und so weiter. Dies ist oft kein sehr gutes Code-Design und die Standard-Stream-API ist nicht darauf zugeschnitten, sie zu unterstützen.

Verwandte Themen