Есть ли способ уменьшить шум кода, используя поток Java? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть два класса:

public class Cat
{
   public Cat(UUID id, String name)
   {
     this.id = id;
     this.name = name;
   }

   @Getter
   UUID id;

   @Getter
   String name;
}

public class Animal
{
   @Getter
   UUID id;

   @Getter
   String name;
}

И у меня есть две карты:

Map<Cat, Location> map = new HashMap<>();
Map<Animal, Location> map2 = new HashMap<>();

Мне нужно легко преобразовать map2 данные в map. Я смог сделать это с помощью следующего кода:

for (Entry<Animal, Location> entry : map2.entrySet())
{
   UUID id = entry.getKey().getId();
   String name = entry.getKey().getName();

   Cat key = new Cat(id, name);
   map.put(key, entry.getValue());
}

return map;

Есть ли лучший способ сделать это или подход, который я выбрал, хорошо?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Вы можете использовать коллектор toMap() с перегрузкой слияния:

Map<Cat, Location> map =
map2.entrySet()
    .stream()
    .collect(toMap(e-> new Cat(e.getKey().getId()), entry.getKey().getName(), 
                   Entry::getValue, (a,b)->b ));

Или, может быть, проще без потока:

Map<Cat, Location> map = new HashMap<>();
map2.forEach( (k,v) -> map.put(new Cat(k.getId(), k.getName()), v) );
0 голосов
/ 29 сентября 2019

Вы можете использовать Collectors.toMap как:

Map<Cat, Location> map = map2.entrySet().stream()
        .collect(Collectors.toMap(
                entry -> new Cat(entry.getKey().getId(), entry.getKey().getName()),
                Map.Entry::getValue,
                (a, b) -> b));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...