簡體   English   中英

從嵌套的 HashMap 中收集

[英]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>傳遞給該Mapget()方法將始終返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM