Java 中的 JavaTuples
Rupam Yadav
2023年10月12日
元組是一種資料結構,可以儲存物件而不需要它們之間的任何關係,但具有共同的動機。Java 不支援元組資料結構,但我們可以使用 JavaTuples
庫。
JavaTuples
的特點
- 元組是型別安全的
- 它們是不可變的
- 我們可以遍歷元組值
- 它們是可序列化的
- 他們實現了
Comparable<Tuple>
- 實現諸如
equals()
、hashCode()
和toString()
之類的方法
JavaTuples
中的元組類
我們最多可以在元組類中使用十個元素。JavaTuples
中的每個元素都有特殊的子類,如下表所述:
元素數量(元組大小) | 類名稱 | 例子 |
---|---|---|
一 | Unit |
Unit<1> |
二 | Pair |
Pair<1,2> |
三 | Triplet |
Triplet<1,2,3> |
四 | Quartet |
Quartet<1,2,3,4> |
五 | Quintet |
Quintet<1,2,3,4,5> |
六 | Sextet |
Sextet<1,2,3,4,5,6> |
七 | Septet |
Septet<1,2,3,4,5,6,7> |
八 | Octet |
Octet<1,2,3,4,5,6,7,8> |
九 | Ennead |
Ennead<1,2,3,4,5,6,7,8,9> |
十 | Decade |
Decade<1,2,3,4,5,6,7,8,9,10> |
JavaTuples
中的方法
Tuple
類提供了各種方法來執行操作。
方法 | 描述 |
---|---|
equals() |
它用於覆蓋 Object 類的 equals 方法的預設實現 |
hashCode() |
返回每個物件的雜湊碼。 |
toString() |
返回一個字串表示 |
getSize() |
返回元組的大小 |
getValue() |
返回元組中指定位置的值 |
indexOf() |
返回給定字串中詢問的子字串的索引。 |
contains() |
檢查元組中是否存在元素 |
containsAll() |
檢查列表或陣列的所有元素是否存在於元組中 |
iterator() |
返回一個迭代器 |
lastIndexOf() |
返回給定字串中詢問的子字串的最後一個索引。 |
toArray() |
元組到陣列 |
toList() |
要列出的元組 |
在 Java 中實現元組
我們匯入以下基於 maven 的依賴項以使用 JavaTuples
庫。
<dependency>
<groupId>org.javatuples</groupId>
<artifactId>javatuples</artifactId>
<version>[1.2]</version>
<scope>compile</scope>
</dependency>
在示例中,我們實現了上表中的各種元組類,並通過列印它們來獲取它們的值。我們在元組中提供不同的資料型別,如 String
、Integer
、Boolean
等。
我們還建立了一個類 DummyClass
,如果它丟擲錯誤,則在元組中傳遞它的物件。
import org.javatuples.*;
public class JavaTuplesExample {
public static void main(String[] args) {
Unit<String> unitTuple = new Unit<>("First Tuple Element");
Pair<String, Integer> pairTuple = new Pair<>("First Tuple Element", 2);
Triplet<String, Integer, Boolean> tripletTuple = new Triplet<>("First Tuple Element", 2, true);
Quartet<String, Integer, Boolean, String> quartetTuple =
new Quartet<>("First Tuple Element", 2, true, "Fourth Tuple Element");
Quintet<String, Integer, Boolean, String, Integer> quintetTuple =
new Quintet<>("First Tuple Element", 2, true, "Fourth Tuple Element", 5);
Sextet<String, Integer, Boolean, String, Integer, DummyClass> sextetTuple =
new Sextet<>("First Tuple Element", 2, true, "Fourth Tuple Element", 5, new DummyClass());
Septet<String, Integer, Boolean, String, Integer, DummyClass, Integer> septetTuple =
new Septet<>(
"First Tuple Element", 2, true, "Fourth Tuple Element", 5, new DummyClass(), 7);
Octet<String, Integer, Boolean, String, Integer, DummyClass, Integer, String> octetTuple =
new Octet<>("First Tuple Element", 2, true, "Fourth Tuple Element", 5, new DummyClass(), 7,
"Eight Tuple Element");
Ennead<String, Integer, Boolean, String, Integer, DummyClass, Integer, String, Integer>
enneadTuple = new Ennead<>("First Tuple Element", 2, true, "Fourth Tuple Element", 5,
new DummyClass(), 7, "Eight Tuple Element", 9);
Decade<String, Integer, Boolean, String, Integer, DummyClass, Integer, String, Integer, String>
decadeTuple = new Decade<>("First Tuple Element", 2, true, "Fourth Tuple Element", 5,
new DummyClass(), 7, "Eight Tuple Element", 9, "Tenth Tuple Element");
System.out.println(unitTuple);
System.out.println(pairTuple);
System.out.println(tripletTuple);
System.out.println(quartetTuple);
System.out.println(quintetTuple);
System.out.println(sextetTuple);
System.out.println(septetTuple);
System.out.println(octetTuple);
System.out.println(enneadTuple);
System.out.println(decadeTuple);
}
}
class DummyClass {}
輸出:
[First Tuple Element]
[First Tuple Element, 2]
[First Tuple Element, 2, true]
[First Tuple Element, 2, true, Fourth Tuple Element]
[First Tuple Element, 2, true, Fourth Tuple Element, 5]
[First Tuple Element, 2, true, Fourth Tuple Element, 5, DummyClass@254989ff]
[First Tuple Element, 2, true, Fourth Tuple Element, 5, DummyClass@5d099f62, 7]
[First Tuple Element, 2, true, Fourth Tuple Element, 5, DummyClass@37f8bb67, 7, Eight Tuple Element]
[First Tuple Element, 2, true, Fourth Tuple Element, 5, DummyClass@49c2faae, 7, Eight Tuple Element, 9]
[First Tuple Element, 2, true, Fourth Tuple Element, 5, DummyClass@20ad9418, 7, Eight Tuple Element, 9, Tenth Tuple Element]
作者: Rupam Yadav
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn