【问题标题】:List Object with multiple "keys" in it列出包含多个“键”的对象
【发布时间】:2013-09-14 09:02:06
【问题描述】:

喂,

目前我有一个 Java 列表,我通过 list.add("Example"); 添加条目

但现在我想为每个条目添加 ID。我可以通过

list.put("Example XY");
list.setData("Example XY", 1);

但在我的列表中有很多重复的“名称”。所以他们的名字的键被覆盖,因为我似乎不能在其中设置重复的键。

有人知道如何解决它吗?非常感谢!

【问题讨论】:

    标签: java arrays list hashmap swt


    【解决方案1】:

    您必须考虑当一个对象具有相同的键时它意味着什么。如果它不是同一个对象,那么您使用的密钥就是错误的。您可以将数据添加到对象而不是使用字符串,然后有一个列表,其中包含每个“名称”的倍数

    List l = new ArrayList<SomeObject>;
    
    list.put(new SomeObject("red ball", 1))
    list.put(new SomeObject("red ball", 2))
    

    或制作一个值列表的映射

    Map<String,List<SomeObject>> = new HashMap<String,List<SomeObject>>;
        map.get("Red Ball")==null ? map.put(new ArrayList<SomeObject>(){{ add(x) }})
                                  : map.get("Red Ball").add(x);
    

    我个人更喜欢解决方案 1。

    【讨论】:

      【解决方案2】:

      你应该看看MultiMap

      使用MultiMap&lt;String, String&gt;

      Multimap<String, String> myMultimap = ArrayListMultimap.create();
      
        // Adding some key/value
        myMultimap.put("E1", "One");
        myMultimap.put("E1", "Two");
        myMultimap.put("E1", "Three");
        myMultimap.put("E2", "AnotherOne");
      
        // Getting the size
        int size = myMultimap.size();
        System.out.println(size);  // 4
      
        // Getting values
        Collection<string> sample = myMultimap.get("E1");
        System.out.println(E1); // [One, Two, Three];
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        如果您想在集合中存储键值对,请使用HashMap

        import java.util.HashMap;
        
        public class Test1 {     
        
            public static void main( String [] args) 
            {     
                HashMap<String, String> map = new HashMap<String,String>();
                map.put("1", "Example XY");
                map.put("2", "Example XZ");
            } 
        } 
        

        注意:key不能有重复值

        【讨论】:

        • 那么他如何获得“Example XY”的 id 呢?遍历所有键不是一个好的解决方案...
        • OP 可以使用 MultiMap 来解决这个问题。检查我的答案。
        【解决方案4】:

        您真的应该考虑改用ListViewerListViewer 可以包含您想要的任何 bean 对象,并将其任何字段显示为 List 中的文本。

        HereListViewer 的一个示例。


        这肯定是更多的代码,但最终还是值得的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多