我有两节课:
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;
是否有更好的方法可以做到这一点?或者我可以接受吗?
答案 0 :(得分: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));
答案 1 :(得分:0)
您可以将spark.conf.get("spark.sql.autoBroadcastJoinThreshold")
收集器与合并重载一起使用:
toMap()
或者在没有流的情况下可能更简单:
Map<Cat, Location> map =
map2.entrySet()
.stream()
.collect(toMap(e-> new Cat(e.getKey().getId()), entry.getKey().getName(),
Entry::getValue, (a,b)->b ));