如何将数据从一个arraylist共享到其他几个arraylist

时间:2015-04-04 08:51:32

标签: java arraylist

我有这样的arraylist: 第一个arraylist:

  

[ID 1,名称aa,TestN 500,类型R,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2013,ID 2,名称bb,TestN 500,类型R,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2014 ...]

将元素添加到arraylist

的方法
list.add(new Data((String) it.next(), record[j]));

如何划分此列表并添加到另一个arraylist's(对diviade的condiotion是Type,列表的数量是Type类型的数量)

所以,如果我在arraylist中出现3次TYP: 输入R. 输入T. 输入Y

预期产出:

  

第一个arraylist:[ID 1,名称aaa,TestN 500,Type R,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2013]

     

第二个arraylist:[ID 2,名称aab,TestN 500,Type T,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2014]

     

第三名arraylist:[ID 3,姓名abc,TestN 500,Y型,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2015]

感谢您提供英语的任何提示和故事

- 修改

class Data {
 private String head; {getters & setters}
 private Object obj; {getters & setters}
    }

在这个课程中,我有来自.xls文件的数据

Head - 是字符串,如“ID”,“Name”“TestN”“Type”.. obj - 这里我有一些对象,如“1”,“aa”,“500”,“R”

2 个答案:

答案 0 :(得分:2)

首先,我认为您应该更改存储数据的方式。您的Data课程如下:

class Data {
    private String head; {getters & setters}
    private Object obj; {getters & setters}
}

目前,您为每个字段创建一个新的Data对象,因此您的列表如下所示:

[Data("ID", 1), Data("Name", "aaa"), Data("TestN", 500), Data("Type", "R"), Data("TestF", 500.123), Data("TestD", "Fri Sep 06 00:00:00 CEST 2013"),
 Data("ID", 2), Data("Name", "aab"), Data("TestN", 500), Data("Type", "T"), Data("TestF", 500.123), Data("TestD", "Fri Sep 06 00:00:00 CEST 2014"),
 ...]

请注意,字段之间的关系完全丢失。您如何知道ID 1Type R属于一起?依赖列表中对象的位置不是一个好的选择。此外,当您使用Object作为所有值的类型时,您将丢失类型信息。

更好的设计是使用正确的类型并将与特定记录关联的所有信息存储在同一对象中,如下所示:

class Data {
    final int id;
    final String name;
    final int testN;
    final String type;
    final float testF;
    // here you can use any other date type you like
    final LocalDateTime testD; 

    Data(int id, String name, int testN, String type, float testF, LocalDateTime testD) {
        this.id = id;
        this.name = name;
        this.testN = testN;
        this.type = type;
        this.testF = testF;
        this.testD = testD;
    }
 }

我使用了final修饰符,因此以后无法更改字段,必须在构造函数中设置。如果您喜欢使用getter和setter,可以将其删除。

现在每个列表元素都是一条记录,所有相关信息都存储在一起。

[Data(1, "aaa", 500, "R", 500.123, "Fri Sep 06 00:00:00 CEST 2013"),
 Data(2, "aab", 500, "T", 500.123, "Fri Sep 06 00:00:00 CEST 2014"),
 ...]

我们可以创建一个只检索那些匹配某种类型的对象的方法。如果您使用的是Java 8,则可以使用filter()

static List<Data> filterByType(List<Data> list, String type) {
    return list.stream().filter(item -> type.equals(item.type))
                        .collect(Collectors.toList());
}

您可以这样称呼它:

List<Data> typeRData = filterByType(list, "R");

只获取type"R"的元素。

答案 1 :(得分:1)

我知道它是非常原始的解决方案,但如果已知数组的数量和长度,可以使用简单的循环划分它:

public static void divideList(ArrayList<String> strList){
    ArrayList<ArrayList> listOfLists = new ArrayList<ArrayList>();

    int k = 0;
    for(int i=0;i<3;i++){
        ArrayList<String> list = new ArrayList<String>();
        for(int j=0;j<6;j++){
            list.add(strList.get(k));
            k++;
        }
        listOfLists.add(list);
    }

    System.out.println("list1: "+listOfLists.get(0));
    System.out.println("list2: "+listOfLists.get(1));
    System.out.println("list3: "+listOfLists.get(2));
}

输出与预期的一样:

  

list1:[ID 1,名称aa,TestN 500,Type R,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2013]

     

list2:[ID 2,名称aab,TestN 500,Type T,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2014]

     

list3:[ID 3,名称abc,TestN 500,类型Y,TestF 500.123,TestD Fri Sep 06 00:00:00 CEST 2015]