我正在使用下面列出的方法將包含子類值的映射轉換為超類值的映射。有沒有更好/推薦的方法來實作同樣的目標?
class SuperClass{
private String name;
// getters, setters and copyOf
}
class SubClass extends SuperClass {
private String id;
// getters and setters
}
Map<String, SuperClass> superClassMap = subclass
.entrySet()
.stream()
.collect(
Collectors.toMap(Entry::getKey, entry -> SuperClass.copyOf(entry.getValue()))
);
編輯:
以下是我正在執行的反向操作 -
superClassMap
.entrySet()
.stream()
.collect(
Collectors.toMap(
Entry::getKey,
entry ->
SubClass
.builder()
.setName(entry.getValue().getName())
.setId(anotherMap.get(entry.getKey()).getId())
.build()
)
);
uj5u.com熱心網友回復:
如果你有 Guava,你可以獲得這樣的映射視圖:
Maps.transformValues(SuperClass:copyOf)
否則,我會說你的方式很好。或者你可能更喜歡這個:
Map<String, SuperClass> superClassMap = new HashMap<>();
subclass.forEach((k, v) -> superClassMap.put(k, SuperClass.copyOf(v)));
uj5u.com熱心網友回復:
要修改映射的所有值,您可以使用 Java 8 方法Map.replaceAll(),它期望根據先前的值和鍵BiFunction生成一個新值:
Map<String, SuperClass> superClass = new HashMap<>(subclass);
superClass.replaceAll((k, v) -> SuperClass.copyOf(v));
注意: HashMap的復制建構式需要一個 type 的引數Map<? extends K, ? extends V>,因此我們可以提供一個具有subtype值的Map而不會因為上限通配符而出現問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523298.html
標籤:爪哇遗产哈希图java流
上一篇:將子指標向量視為基指標向量
