【问题标题】:Getting the key from a Deque of a HashMap从 HashMap 的双端队列中获取密钥
【发布时间】:2018-07-17 16:33:57
【问题描述】:

我有一个看起来像这样的双端队列:

@Getter
private Deque<Map<int, String>> cars = new LinkedList<>();

我想仅使用密钥从地图的双端队列中删除每辆车。所以是这样的:

getCars().stream().forEach(car -> delete(car.keySet().iterator().next()));

有没有更好的方法来处理这个问题,而不必使用interator().next()

【问题讨论】:

  • 每辆车的地图内容是什么?这个问题有点不清楚,至少对我来说。您能分享一些示例数据和您想要得到的结果吗?
  • 每辆车都可以有一个 int 值,比如 1,2,3,4 有点像一个 id。然后 String 可以是颜色等。内容真的不重要,只要我可以从地图中查明特定的汽车并根据我提供的 int 值将其删除
  • 所以你想传递一个 int 值并删除所有以该 int 作为键的汽车?
  • 没有。我想删除所有汽车而不必通过 int。但相反,遍历所有键并从双端队列中删除每辆车。通常当它只是一张地图时,我可以使用 keySet() 然后从那里删除所有汽车。

标签: java list dictionary data-structures


【解决方案1】:

removeIf 方法应该可以解决问题:

int keyToDelete = 7; // Arbitrary number
cars.removeIf(m -> m.containsKey(keyToDelete));

编辑:

在早期的 Java 版本中,同样的功能也是可能的,尽管语法会更笨拙 - 您必须获取列表的迭代器,然后遍历它,评估每个项目:

int keyToDelete = 7; // Arbitrary number
Iterator<Map<Integer, String>> iter = cars.iterator();

while(iter.hasNext()) {
    Map<Integer, String> map = iter.next();
    if (map.containsKey(keyToDelete)) {
        iter.remove();
    }
}

【讨论】:

  • 可以在低于 java 8 的版本中使用吗?
  • @RafaelPalomino 不,lambda 是 Java 8 语法。您可以改为使用迭代列表的“笨拙”语法 - 请参阅我编辑的答案。
猜你喜欢
  • 2018-12-25
  • 2017-03-04
  • 2018-07-02
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多