【问题标题】:Group arraylist items by date in Android在Android中按日期对arraylist项目进行分组
【发布时间】:2013-01-03 11:02:15
【问题描述】:

在我的程序中,我有一个 Program 类型的数组列表,如下所示:

   List<Program> programList= new ArrayList<Program>(); 

public class Program {

public String name;
public String date;

public Program(String name, String date) {
    this.name = name;
    this.date= date;
}
    public String date getDate()
    {
     return date;
     }

    public String date setDate(String date)
    {
     this.date=date;
     }

      public String date getName()
    {
     return name;
     }

    public String date setName(String name)
    {
     this.name=name;
     }

在我的活动中,我将项目添加到列表中

      for(int i=0; i < 100; i++)
      {
       Program p= new Program("name","some date");
       programList.add(p):
      }

我想按日期对项目进行分组,比如列表中有一百个项目,其中许多具有相同的日期,我想将日期和具有相同日期的项目的新列表配对。

【问题讨论】:

    标签: android list date group-by


    【解决方案1】:

    您可以使用HashMap 并将String date 用作键,您可以使用ArrayList&lt;Program&gt; 作为值。如果具有该键的对象不存在,HashMap.get(key) 将返回 null。如果它返回 null,您应该创建一个新的 ArraList 并使用该键将其放入 HashMap 中。如果不是,您应该使用返回的对象添加 Programm 实例 例如

      HashMap<String, ArrayList<Programm>> myProgram = new  HashMap<String, ArrayList<Programm>>() ;
      for(int i=0; i < 100; i++)
      {
        String date = "your date";
         ArrayList<Programm> programList = myProgram.get(date);
         if (programList == null) {
             programList = new ArrayList<Programm>();
             myProgram.put(date, programList);
        }
         Program p= new Program("name","some date");
         programList.add(p):
      }
    

    检查错别字

    【讨论】:

    • 我会尝试一下,然后我会接受你的回答 :) 非常感谢,
    【解决方案2】:

    首先,您的 Program 类应如下所示:

    private String name;
    private String date;
    
    public Program(String name, String date) {
        this.name = name;
        this.date = date;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getDate() {
        return date;
    }
    
    public void setDate(String date) {
        this.date = date;
    }
    

    如果你有像你一样的公共字段,那么创建 getter 和 setter 是没有意义的。

    无论如何,您可以使用 HashMap 按日期对程序进行排序:

    private static class Bucket {
    
        private List<Program> programs = new ArrayList<Program>();
    
        private static HashMap<String, Bucket> map = new HashMap<String, Bucket>();
    
        public static void addProgram(Program p) {
            String tempDate = p.getDate();
            Bucket correspondingBucket = map.get(tempDate);
            if (correspondingBucket == null) {
                correspondingBucket = new Bucket();
                map.put(tempDate, correspondingBucket);
            }
            correspondingBucket.programs.add(p);
    
        }
    }
    

    【讨论】:

    • 似乎肯定会奏效。我会尝试一下,然后我会接受你的回答:)非常感谢,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多