如何在java集合中存储三种不同类型的项目?

时间:2017-01-19 14:46:22

标签: java collections

我有一种情况,我必须阅读xml文件,我得到三个这样的元素

2019-03-19,null,null
2016-11-30,null,null
2016-10-14,null,null
2016-09-30,null,null
2016-09-30,1,YEARS
2016-09-30,3,MONTHS
2016-09-30,4,MONTHS

我必须将所有三个项目存储在某些数据结构中并应用我的逻辑,如下所示 我必须找到最后一项的最大值,然后为此我必须找到第二项的最大值然后我必须找到多于一的第一个元素的最大值。

请建议我一些想法

3 个答案:

答案 0 :(得分:0)

创建一个像下面这样的单个对象,它可以容纳所有三个数据元素,并且还能够处理" null"数量和期限长度值的值。您可能希望让构造函数将String日期(2019-03-19)转换为实际日期对象,或者您可以在创建对象之前处理它。然后将这些对象添加到可用于管理和组织它们的数据结构(即列表等)中。

public class ListElement {
    public Date date;
    public Integer qty;
    public String termLength;

    public ListElement(Date d, Integer q, String t) {
        this.date = d;
        this.qty = q;
        this.termLength = t
    }

    // getter methods
    public Date getDate() {
        return this.date;
    }

    public Integer getQty() {
        return this.qty;
    }

    public String getTermLength() {
        return this.termLength;
    }

    public toString() {
         return System.out.println(this.date + "::" + 
                                   this.qty + "::" + 
                                   this.termLength)
    }
}

答案 1 :(得分:0)

如果您有一些预定义的术语,则可以创建枚举:

enum Term {
    AGES, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS;
}

在你的班级中使用它与其他两种类型:

public class MyObjects {
    private Date date;
    private Integer quantity;
    private Term term;

    public MyObjects(Date date, Integer quantity, Term term) {
        this.date = date;
        this.quantity = quantity;
        this.term = term;
    }

    // getters, setters
}

然后定义接受这3个参数的构造函数,并在处理XML文件时使用它。

答案 2 :(得分:0)

存储数据的两种不同方式。一个是2D数组,另一个是arraylist。所有数据都是String类型。您必须使用Integer.parseInt()解析整数以获取int值。您还必须捕获空值。这假设您的xml数据在每行的末尾都有换行符。

public static void main(String[] args) {
        // TODO code application logic here
        //Assuming there are \n char at end of line
        String xml = "2019-03-19,null,null\n" +
                        "2016-11-30,null,null\n" +
                        "2016-10-14,null,null\n" +
                        "2016-09-30,null,null\n" +
                        "2016-09-30,1,YEARS\n" +
                        "2016-09-30,3,MONTHS\n" +
                        "2016-09-30,4,MONTHS";       


        System.out.println("2D Array Output:");
        String[][] twoDArrayExample = twoDArrayVersion(xml);
        //print 2D array
        for(int i = 0; i < twoDArrayExample.length; i++)
        {
            for(int z = 0; z < twoDArrayExample[i].length; z++)
            {
                System.out.print(twoDArrayExample[i][z] + " - ");
            }
            System.out.println();
        }        

        System.out.println("\n\nArray List Output:");
        ArrayList<ArrayList<String>> arrayListExample = arrayListVersion(xml);
        //print arraylist
        for(ArrayList<String> entry : arrayListExample)
        {
            for(String item : entry)
            {
                System.out.print(item + " + ");
            }
            System.out.println();
        }      
    }//end of main

    static String[][] twoDArrayVersion(String xml)
    {
        String[][] dataHolder;  

        String[] tempDataHolder = xml.split("\n");        
        dataHolder = new String[tempDataHolder.length][3];
        for(int i = 0; i < tempDataHolder.length; i++)
        {
            String[] tempDataHolder2 = tempDataHolder[i].split(",");
            dataHolder[i][0] = tempDataHolder2[0];
            dataHolder[i][1] = tempDataHolder2[1];
            dataHolder[i][2] = tempDataHolder2[2];
        }

        return dataHolder;
    }

    static ArrayList<ArrayList<String>> arrayListVersion(String xml)
    {
        ArrayList<ArrayList<String>> dataHolder = new ArrayList();

        String[] tempDataHolder = xml.split("\n");        
        for(int i = 0; i < tempDataHolder.length; i++)
        {
            ArrayList<String> tempArrayList = new ArrayList();

            String[] tempDataHolder2 = tempDataHolder[i].split(",");
            tempArrayList.add(tempDataHolder2[0]);
            tempArrayList.add(tempDataHolder2[1]);
            tempArrayList.add(tempDataHolder2[2]);            
            dataHolder.add(tempArrayList);
        }

        return dataHolder;
    }