Java 从嵌套HashMap中删除集合

Java 从嵌套HashMap中删除集合,java,collections,hashmap,Java,Collections,Hashmap,考虑到NullPointerException,我的以下代码有一个小问题: @Override public List<FlowEdge<V>> getEdges() { List<FlowEdge<V>> edges = new ArrayList<FlowEdge<V>>(); Collection<FlowEdge<V>> collection = new ArrayList&l

考虑到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;
}
@覆盖
公共列表getEdge(){
列表边=新的ArrayList();
集合集合=新的ArrayList();
collection=graph.get(getNodes()).values();
edges.addAll(集合);
返回边;
}
我知道这可以写得短一点,但我想把代码拆分一点,找出从哪里得到NullPointerException。因此,问题与“collection=…”一致

Graph是一个嵌套的HashMap:


Map图的
键的类型为
V
,因此将
传递给
Map
get()
方法将始终返回
null

如果要获取内部
映射的所有
FlowEdge
值,可以编写如下代码:

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>>
列表集合=
graph.values()//集合m.values().stream()).collect(collector.toList());

With values()它说:
类型不匹配:无法从集合转换为列表
With.stream()它说:``类型映射的方法流()未定义`` With.flatMap(…)它说:
类型映射的方法flatMap((m)->{}未定义
With.collect(…)它说:``方法collect(Collectors.toList())未定义类型映射“``这些已经是其他方法,但不幸的是仍然没有解决方案。您还有其他建议吗?我正在使用Eclipse和openJDK 12.0.2(这是我在这个项目中必须使用的)@Peerius这个答案向您展示了一个您应该作为一个整体使用的解决方案,而不是四个您必须一个接一个地尝试的解决方案。@Holger哦,这就是OP在该评论中的意思。我将澄清我的答案。谢谢。@Eran好吧,我是从错误消息中推断出来的,这些错误消息在按原样使用代码时是不可能得到的(而且不可能同时获取它们)。当覆盖变量如
collection=graph.get(getNodes()).values()时,初始化没有意义;
在下一行的右边。除此之外,如果该行证明是
NullPointerException
,则该行中解引用的值之一必须是
null
,或者是
graph
或者
get
返回的值。当
graph
getNodes()中的
graph
相同时
method,您正在执行的是
graph.get(graph.keySet())
,它没有任何意义,总是返回
null
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());