我喜欢Java有一个映射,你可以在映射中定义每个条目的类型,例如<String, Integer>。

我正在寻找的是一种类型的集合,其中集合中的每个元素都是一对值。对中的每个值都可以有自己的类型(如上面的String和Integer示例),该类型在声明时定义。

该集合将保持其给定的顺序,不会将其中一个值视为唯一键(就像在映射中一样)。

本质上,我希望能够定义一个数组类型<String,Integer>或任何其他2种类型。

我意识到,我可以让一个类只有2个变量,但这似乎过于啰嗦。

我也意识到我可以使用一个2D数组,但因为我需要使用不同的类型,我必须使他们OBJECT数组,然后我必须一直强制转换。

我只需要在集合中存储对,所以每个条目只需要两个值。像这样的东西不走阶级路线就存在吗?谢谢!


当前回答

Spring在Data Utils包org.springframework.data.util中有一个Pair<S,T>类型

Pair<String,Integer> pair = Pair.of("Test", 123);
System.out.println(pair.getFirst());
System.out.println(pair.getSecond());

其他回答

在project Reactor (io. projecreactor: Reactor -core)中,有对n-Tuples的高级支持:

Tuple2<String, Integer> t = Tuples.of("string", 1)

在那里你可以得到t.getT1(), t.getT2(),…特别是Stream或Flux,你甚至可以映射元组元素:

Stream<Tuple2<String, Integer>> s;
s.map(t -> t.mapT2(i -> i + 2));

您可以编写一个通用的Pair< a, B>类,并在数组或列表中使用它。是的,你必须写一个类,但是你可以为所有类型重用同一个类,所以你只需要做一次。

我想问你是否不想只使用List<Pair<T, U>>?但是,当然,JDK没有Pair<>类。但我在维基百科和forums.sun.com上都找到了一个。干杯

Spring在Data Utils包org.springframework.data.util中有一个Pair<S,T>类型

Pair<String,Integer> pair = Pair.of("Test", 123);
System.out.println(pair.getFirst());
System.out.println(pair.getSecond());

“Apache Commons Lang 3”Pair类和相关子类怎么样?

    import org.apache.commons.lang3.tuple.ImmutablePair;
    import org.apache.commons.lang3.tuple.Pair;
    ...
    @SuppressWarnings("unchecked")
    Pair<String, Integer>[] arr = new ImmutablePair[]{
            ImmutablePair.of("A", 1),
            ImmutablePair.of("B", 2)};

    // both access the 'left' part
    String key = arr[0].getKey();
    String left = arr[0].getLeft();

    // both access the 'right' part
    Integer value = arr[0].getValue();
    Integer right = arr[0].getRight();

ImmutablePair是一个特定的子类,它不允许修改pair中的值,但是还有其他具有不同语义的实现。这些是Maven的坐标,如果你需要的话。

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>