Ошибка компиляции: невозможно преобразовать Set <Set <T>> в Set <Map.Entry <T, Set <T>>> - PullRequest
3 голосов
/ 02 апреля 2019

Я новичок в работе с потоками, я хочу изменить карту, применив потоковые операции к ее набору записей, но я не смог сделать это из-за ошибки компиляции.

Приведенный ниже код просто создает новую картуобъект и назначить ему несколько целочисленных значений.Затем он пытается изменить карту, удаляя ее, применяя потоковые операции к своему набору записей и назначая ее другому набору.

import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

class Example {
public static void main (String[] args) {
    Map<Integer, Set<Integer>> map = new HashMap<>();

    map.put(1, new HashSet<>());
    map.put(2, new HashSet<>());
    map.put(3, new HashSet<>());

    for (int i = 1; i <= 3; ++i)
        for (int j = 1; j <= 3; ++j)
            map.get(i).add(j);

    Set<Map.Entry<Integer, Set<Integer>>> set = map.entrySet().stream()
                                                              .filter(e -> !e.equals(1))
                                                              .map(e -> e.setValue(e.getValue().stream()
                                                                                               .filter(x -> !x.equals(1))
                                                                                               .collect(Collectors.toSet())))
                                                              .collect(Collectors.toSet());
    System.out.println(set);
    }
 }

Приведенный выше код выдал ошибки компиляции, я не знаю почему, потому что, как я на это посмотрел, все выглядит хорошо.Что изменить в моем коде выше для успешной компиляции?

1 Ответ

2 голосов
/ 02 апреля 2019

1) Отфильтруйте записи в Map, ключи которых не равны 1 (Так как Map не допускает дублирование ключей, у вас будет только одна запись с ключом 1)

2) Ифильтровать Set (поскольку Set не будет разрешать дубликаты, будет иметь только одно значение 1)

Set<Map.Entry<Integer,Set<Integer>>> result =  map.entrySet()
                                                  .stream()
                                                  .filter(e->!e.getKey().equals(1))
                                                  .map(entry->new AbstractMap.SimpleEntry<Integer, Set<Integer>>(entry.getKey(),entry.getValue().stream().filter(i->!i.equals(1)).collect(Collectors.toSet())))
                                           .collect(Collectors.toSet());
...