Можем ли мы объединить эти три вложенных цикла for, используя потоки в Java 8? - PullRequest
3 голосов
/ 27 марта 2019

При попытке преобразовать следующий код с помощью Streams я столкнулся с некоторой ошибкой.Я не мог преобразовать это, используя потоки.Я не смог объединить циклы for с помощью потоков

Приведенный ниже код должен быть изменен с помощью потоков.

     for (Admin ah : subProducers) {
                List<String> wns = ah.getAdminSitCodes().stream()
                        .map(new SitCodeMap()).map(Pair::getFirst)
                        .distinct().collect(Collectors.toList());

                for (String wn : wns) {
                    for (String value : values) {
                        if (wn.equals(value)) {
                            admin.add(ah);
                        }
                    }
                }
            }

Я пробовал, как показано ниже

     admin = subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()
                  .map(new SitCodeMap())

     .map(Pair::getFirst).distinct()).collect(Collectors.toList())
                    .stream()
                   .filter(wns->values.stream().anyMatch(v- 
      >wns.equals(v)))
                   .collect(Collectors.toList());

Необходимо преобразовать это в список, используя потоки

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы можете использовать коллекцию Set для values, а затем завершить код следующим образом:

List<Admin> admin = subProducers.stream()
        .filter(a -> a.getAdminSitCodes().stream()
                .map(new SitCodeMap())
                .map(Pair::getFirst) // assuming this is Stream<String>
                .distinct()
                .anyMatch(values::contains))
        .collect(Collectors.toList());
0 голосов
/ 27 марта 2019

Вы, вероятно, ищете для flatMap потока ():

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-

После flatMap вы получаете «плоский» поток всех элементов подпотоков, созданных в плоской карте.

So

subProducers.stream().flatMap(sp-> sp.getAdminSitCodes().stream()) 

создает поток всех adminSitCodes, тогда как

subProducers.stream().map(sp-> sp.getAdminSitCodes().stream()) 

производит поток потоков.

...