[英]Collection out of a nested HashMap
考慮到 NullPointerException,我的以下代碼有點問題:
@Override
public List<FlowEdge<V>> getEdges() {
List<FlowEdge<V>> edges = new ArrayList<FlowEdge<V>>();
Collection<FlowEdge<V>> collection = new ArrayList<>();
collection = graph.get(getNodes()).values();
edges.addAll(collection);
return edges;
}
我知道這可以寫得更短一些,但我想把代碼分開一點,以找出我在哪里得到 NullPointerException。 所以問題與“collection = ...”一致。
圖是一個嵌套的 HashMap:
Map<V, Map<V, FlowEdge<V>> graph = new HashMap<>();
getNodes() 是一個返回同一個類中的集合的方法。 我已經測試了 getNodes() 是否提供了一個空集,但事實並非如此。
@Override
public Set<V> getNodes() {
Set<V> set = graph.keySet();
return set;
}
先感謝您。
graph
Map 的鍵是V
類型,因此將Set<V>
傳遞給該Map
的get()
方法將始終返回null
。
如果你想獲得內部Map
的所有FlowEdge<V>
值,你可以這樣寫:
List<FlowEdge<V>> collection =
graph.values() // a Collection<Map<V, FlowEdge<V>>
.stream() // a Stream<Map<V, FlowEdge<V>>
.flatMap(m -> m.values().stream()) // a Stream<FlowEdge<V>>
.collect(Collectors.toList()); // a List<FlowEdge<V>>
編輯:
請注意,上面的代碼片段是單個語句。 為了便於閱讀,它僅分為多行。
同樣可以用一行代碼編寫:
List<FlowEdge<V>> collection = graph.values().stream().flatMap(m -> m.values().stream()).collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.