자바 튜플 소개

1. 개요

튜플은 서로 관련이있을 수도 있고 아닐 수도있는 여러 요소의 모음입니다. 즉, 튜플은 익명 객체로 간주 될 수 있습니다.

예를 들어, [ "RAM", 16, "Astra"]는 3 개의 요소를 포함하는 튜플입니다.

이 기사에서는 javatuples 라는 튜플 기반 데이터 구조로 작업 할 수있는 매우 간단한 라이브러리를 간략하게 살펴 보겠습니다 .

2. 내장 Javatuples 클래스

이 라이브러리는 튜플과 관련된 대부분의 요구 사항을 충족하는 10 가지 클래스를 제공합니다.

  • 단위
  • 세 쌍둥이
  • 사중주
  • 오중주
  • 육중 주
  • 칠중주
  • 팔중주
  • Ennead
  • 열개의

위의 클래스 외에도 Pair 와 유사한 기능을 제공 하지만 의미가 다른 두 개의 추가 클래스 KeyValueLabelValue가 있습니다.

공식 사이트 따르면 javatuples의 모든 클래스는 형식이 안전하고 변경 불가능 합니다. 각 튜플 클래스는 Iterable , SerializableComparable 인터페이스를 구현합니다 .

3. Maven 종속성 추가

pom.xml에 Maven 종속성을 추가해 보겠습니다 .

 org.javatuples javatuples 1.2 

최신 버전은 Central Maven 저장소를 확인하세요.

4. 튜플 생성

튜플을 만드는 것은 정말 간단합니다. 해당 생성자를 사용할 수 있습니다.

Pair pair = new Pair("A pair", 55);

튜플을 생성하는 약간 덜 장황하고 의미 적으로 우아한 방법도 있습니다.

Triplet triplet = Triplet.with("hello", 23, 1.2);

Iterable 에서 튜플을 만들 수도 있습니다 .

List listOfNames = Arrays.asList("john", "doe", "anne", "alex"); Quartet quartet = Quartet.fromCollection(collectionOfNames);

주의하시기 바랍니다 컬렉션의 항목 수는 우리가 만들려고하는 튜플의 유형과 일치해야합니다 . 예를 들어, 정확히 5 개의 요소가 필요하기 때문에 위 컬렉션을 사용하여 5 중주 를 만들 수 없습니다 . Quintet 보다 높은 차수를 가진 다른 튜플 클래스도 마찬가지입니다 .

그러나 fromIterable () 메서드 에서 시작 인덱스를 지정하여 위 컬렉션을 사용하여 Pair 또는 Triplet 과 같은 더 낮은 순서의 튜플을 만들 수 있습니다 .

Pair pairFromList = Pair.fromIterable(listOfNames, 2);

위의 코드는 “ anne ”및“ alex “를 포함 하는 Pair 를 생성합니다 .

튜플은 모든 배열에서 편리하게 만들 수 있습니다.

String[] names = new String[] {"john", "doe", "anne"}; Triplet triplet2 = Triplet.fromArray(names);

5. 튜플에서 값 얻기

javatuples의 모든 클래스 에는 튜플에서 값을 가져 오는 getValueX () 메서드가 있습니다. 여기서 X 는 튜플 내부 요소의 순서를 지정합니다. 배열의 인덱스와 마찬가지로 X 값은 0부터 시작합니다.

새 Quartet을 만들고 몇 가지 값을 가져 오겠습니다.

Quartet quartet = Quartet.with("john", 72.5, 32, "1051 SW"); String name = quartet.getValue0(); Integer age = quartet.getValue2(); assertThat(name).isEqualTo("john"); assertThat(age).isEqualTo(32);

보시다시피“ john ” 의 위치 는 0이고“ 72.5 ”는 1입니다.

합니다 getValueX () 메소드 유형 안전합니다. 즉, 캐스팅이 필요하지 않습니다.

이에 대한 대안은 getValue (int pos) 메소드입니다. 가져올 요소의 위치가 0부터 시작됩니다. 이 메서드는 형식이 안전하지 않으며 명시 적 캐스팅이 필요합니다 .

Quartet quartet = Quartet.with("john", 72.5, 32, "1051 SW"); String name = (String) quartet.getValue(0); Integer age = (Integer) quartet.getValue(2); assertThat(name).isEqualTo("john"); assertThat(age).isEqualTo(32);

KeyValueLabelValue 클래스 에는 해당 메서드 getKey () / getValue ()getLabel () / getValue ()가 있습니다.

6. 값을 튜플로 설정

getValueX () 와 유사하게 javatuples의 모든 클래스에는 setAtX () 메서드가 있습니다. 다시 말하지만, X 는 설정하려는 요소의 0 기반 위치입니다.

Pair john = Pair.with("john", 32); Pair alex = john.setAt0("alex"); assertThat(john.toString()).isNotEqualTo(alex.toString());

The important thing here is that the return type of setAtX() method is the tuple type itself. This is because the javatuples are immutable. Setting any new value will leave the original instance intact.

7. Adding and Removing Elements from Tuples

We can conveniently add new elements to the tuples. However, this will result in a new tuple of one order higher being created:

Pair pair1 = Pair.with("john", 32); Triplet triplet1 = pair1.add("1051 SW"); assertThat(triplet1.contains("john")); assertThat(triplet1.contains(32)); assertThat(triplet1.contains("1051 SW"));

It is clear from the above example that adding one element to a Pair will create a new Triplet. Similarly, adding one element to a Triplet will create a new Quartet.

The example above also demonstrates the use of contains() method provided by all the classes in javatuples. This is a really handy method for verifying if the tuple contains a given value.

It is also possible to add one tuple to another using the add() method:

Pair pair1 = Pair.with("john", 32); Pair pair2 = Pair.with("alex", 45); Quartet quartet2 = pair1.add(pair2); assertThat(quartet2.containsAll(pair1)); assertThat(quartet2.containsAll(pair2));

Note the use of containsAll() method. It will return true if all the elements of pair1 are present in quartet2.

By default, the add() method adds the element as a last element of the tuple. However, it is possible to add the element at a given position using addAtX() method, where X is the zero-based position where we want to add the element:

Pair pair1 = Pair.with("john", 32); Triplet triplet2 = pair1.addAt1("1051 SW"); assertThat(triplet2.indexOf("john")).isEqualTo(0); assertThat(triplet2.indexOf("1051 SW")).isEqualTo(1); assertThat(triplet2.indexOf(32)).isEqualTo(2);

This example adds the String at position 1, which is then verified by the indexOf() method. Please note the difference in order of the types for the Pair and the Triplet after the call to addAt1() method call.

We can also add multiple elements using any of add() or addAtX() methods:

Pair pair1 = Pair.with("john", 32); Quartet quartet1 = pair1.add("alex", 45); assertThat(quartet1.containsAll("alex", "john", 32, 45));

In order to remove an element from the tuple, we can use the removeFromX() method. Again, X specifies the zero-based position of the element to be removed:

Pair pair1 = Pair.with("john", 32); Unit unit = pair1.removeFrom0(); assertThat(unit.contains(32));

8. Converting Tuples to List/Array

We have already seen how to convert a List to a tuple. Let's now see hot to convert a tuple to a List:

Quartet quartet = Quartet.with("john", 72.5, 32, "1051 SW"); List list = quartet.toList(); assertThat(list.size()).isEqualTo(4);

It is fairly simple. The only thing to note here is that we will always get a List, even if the tuple contains the same type of elements.

Finally, let's convert the tuple to an array:

Quartet quartet = Quartet.with("john", 72.5, 32, "1051 SW"); Object[] array = quartet.toArray(); assertThat(array.length).isEqualTo(4);

Clear enough, the toArray() method always returns an Object[].

9. Conclusion

이 기사에서는 javatuples 라이브러리를 살펴보고 단순함을 관찰했습니다. 우아한 의미를 제공하며 사용하기 정말 쉽습니다.

GitHub에서이 기사의 전체 소스 코드를 확인하십시오. 완전한 소스 코드에는 여기에서 다루는 것보다 약간 더 많은 예제가 포함되어 있습니다. 이 기사를 읽은 후에는 추가 예제를 쉽게 이해할 수있을 것입니다.