Java值集合对? (元组?)
我喜欢Java如何在Map中定义地图中每个条目的类型,例如<String, Integer>
。
我在寻找的是一种集合,其中集合中的每个元素都是一对值。 对中的每个值都可以有自己的类型(如上面的String和Integer示例),它在声明时定义。
该集合将保持其给定顺序,并不会将其中一个值视为唯一键(如在地图中)。
基本上我希望能够定义一个类型为<String,Integer>
或任何其他2种类型的ARRAY。
我意识到我可以只用2个变量来创建一个类,但这看起来过于冗长。
我也意识到我可以使用二维数组,但由于需要使用不同的类型,所以我必须使它们成为OBJECT数组,然后我必须一直投射。
我只需要在集合中存储对,所以每个条目只需要两个值。 像这样的东西存在没有去类路线? 谢谢!
Pair类是那些“给予”泛型例子之一,它很容易编写。 例如,我的头顶上:
public class Pair<L,R> {
private final L left;
private final R right;
public Pair(L left, R right) {
this.left = left;
this.right = right;
}
public L getLeft() { return left; }
public R getRight() { return right; }
@Override
public int hashCode() { return left.hashCode() ^ right.hashCode(); }
@Override
public boolean equals(Object o) {
if (!(o instanceof Pair)) return false;
Pair pairo = (Pair) o;
return this.left.equals(pairo.getLeft()) &&
this.right.equals(pairo.getRight());
}
}
是的,它存在于网络上的多个地方,具有不同程度的完整性和特征。 (我上面的例子是不可改变的。)
AbstractMap.SimpleEntry
你很容易找到这个:
java.util.List<java.util.Map.Entry<String,Integer>> pairList= new java.util.ArrayList<>();
你怎么填满它?
java.util.Map.Entry<String,Integer> pair1=new java.util.AbstractMap.SimpleEntry<>("Not Unique key1",1);
java.util.Map.Entry<String,Integer> pair2=new java.util.AbstractMap.SimpleEntry<>("Not Unique key2",2);
pairList.add(pair1);
pairList.add(pair2);
这简化为:
Entry<String,Integer> pair1=new SimpleEntry<>("Not Unique key1",1);
Entry<String,Integer> pair2=new SimpleEntry<>("Not Unique key2",2);
pairList.add(pair1);
pairList.add(pair2);
并且,通过createEntry
方法的帮助,可以进一步减少冗长:
pairList.add(createEntry("Not Unique key1", 1));
pairList.add(createEntry("Not Unique key2", 2));
由于ArrayList
不是终点,它可以被继承到露出of
方法(和前述createEntry
方法),从而在语法上简洁:
TupleList<java.util.Map.Entry<String,Integer>> pair = new TupleList<>();
pair.of("Not Unique key1", 1);
pair.of("Not Unique key2", 2);
这些内置类也是一个选项:
AbstractMap.SimpleEntry
AbstractMap.SimpleImmutableEntry