【问题标题】:Java - collections List<Map<Integer,Integer>>Java - 集合 List<Map<Integer,Integer>>
【发布时间】:2014-05-04 01:36:32
【问题描述】:

我需要将两个值保存到 ArrayList 的一个单元格中。立即,我正在浏览列表并总结价值。将数据存储到 Arraylist 的最佳方法是什么?地图? 我试过这样的事情:

List<Map<Integer, Integer>>

但我有时需要获取 KEY,有时需要获取 VALUE,但获取它们非常困难。 有没有更简单的方法?

【问题讨论】:

  • 也许在 Arraylist 中保存一个整数数组?

标签: java collections arraylist map


【解决方案1】:

如果您需要将两个值存储为一个单元,则编写一个包含两个int 字段的类,并适当命名。比如你的两个int值代表x和y坐标,写一个类

class Point {
   private int x;
   private int y;
   ...
}

...然后使用ArrayList&lt;Point&gt;

【讨论】:

    【解决方案2】:

    您是否只是想在数组列表的每个槽中存储一个元组(即两个值)?

    最简单的方法是创建一个 Tuple 类(getFirst()、getSecond()) - 或者如果您希望它快速而肮脏,存储一个大小为 2 的数组:

    List<int[]> list = new ArrayList<int[]>();
    list.add(new int[]{1, 2});
    

    如果这不是您想要做的,请提供一些说明。

    【讨论】:

    • 这也是一种方法,但恕我直言,用 getter 和 setter 创建新类更好。谢谢你的想法。
    【解决方案3】:

    如果您需要特定键的多个值,

    Map<Integer, List<Integer>>
    

    检查 (Guava's Multimap)。你可以找到相当不错的类或实用类进行转换。

    如果这不适合你,你的定义还不错,但如果有单个 key=value 对,这可能会更好:

    List<Map.Entry<Integer, Integer>>
    

    Entry 是 map 内部的简单内部类,用于存储 Key/Value 对。 此外,如果你坚持你的方法(可能会很复杂)或者你切换到 Entry,那么改变并不难(如果你总是需要 Keys 或总是只需要 Values。

    List<Entry<Integer, Integer>> values; // filled, initialised
    
    // Getting only Keys
    values.stream().map(Entry::getKey);   // Java8 stuff - method reference
    
    // Getting only Values
    values.stream().map(Entry::getValue);  // Java8 stuff - method reference
    

    在这里阅读method reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 2022-09-30
      • 1970-01-01
      • 2023-03-26
      • 2017-01-28
      • 2022-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多