我有两堂课:
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;
是否有更好的方法可以做到这一点,或者我采用的方法还可以吗?
您可以将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));
您可以将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) );