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
  • 链接地址: http://www.djcxy.com/p/23985.html

    上一篇: A Java collection of value pairs? (tuples?)

    下一篇: How to use Class<T> in Java?