Java 2项元组由Enum组成,长为ArrayList

时间:2014-05-19 20:25:36

标签: java arraylist enums

我希望有一个包含2项元组的数组列表,其中包含enum值和long值。

我很好奇我是否需要为此创建POJO然后创建该类的数组列表,或者是否有更简单的方法,如ArrayList<EnumClassName, long>

如果第二个是可能的,那么我们将非常感谢如何声明和添加项目。

3 个答案:

答案 0 :(得分:3)

第二种选择是不可能的。 ArrayList只有一个模板参数。

你可以做的是:

class MyClass {
    EnumClassName name;
    long l;
    ...
    // getters and setters
}

然后声明你的数组列表:

List<MyClass> list = new ArrayList<MyClass>();

答案 1 :(得分:1)

如果您真的想要获得Tuple课程,可以使用类似

的课程
ArrayList<Map.Entry<EnumClassName, Long>> list; // by the way, you cannot use primitive types, such as long as generic parameters, that's why Long instead of long

用法是:

int index = ...//some index
EnumClassName e = list.get(index).getKey();
long l = list.get(index).getValue(); // autounboxed value

但Java正确的方法是为它创建一个新类:

public class MyTupleName { // also, you should use more convenient name for the case
    EnumClassName e;
    long l; // names are also the subject to change alongside with getters
    public MyTupleName (EnumClassName e, long l) {
        this.e = e;
        this.l = l;
    }
    public EnumClassName getE() {
        return e;
    }
    public long getL() {
        return l;
    }
}

用法是:

ArrayList <MyTupleName> list = ...


int index = ...
MyTupleName tuple = list.get(index);
EnumClassName e = tuple.getE();
long l = tuple.getL();

答案 2 :(得分:1)

Apache Commons有ImmutablePair,这就是你想要的。您可以将其用作

ArrayList<ImmutablePair<EnumClass,Long>>  

还有一个不可变的版本,但你可能想要这个版本。