使用Java流,有什么方法可以减少一些代码噪音?

问题描述 投票:0回答:1

我有两堂课:

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;

是否有更好的方法可以做到这一点,或者我采用的方法还可以吗?

java stream
1个回答
0
投票

您可以将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));

0
投票

您可以将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) );
© www.soinside.com 2019 - 2024. All rights reserved.