자바 9+
Java 9에서는 간단히 다음과 같이 쓸 수 있습니다 Map.entry(key, value)
. 불변 쌍을 만듭니다.
참고 : 이 방법은 키나 값을 null로 허용하지 않습니다. 예를 들어 null 값을 허용하려면 이것을 다음과 같이 변경하십시오 Map.entry(key, Optional.ofNullable(value)).
자바 8+
Java 8에서는보다 일반적인 용도 javafx.util.Pair를 사용하여 불변의 직렬화 가능 쌍을 작성할 수 있습니다. 이 클래스 는 null 키와 null 값을 허용합니다. (Java 9에서이 클래스는 javafx.base모듈에 포함되어 있습니다 ). 편집 : Java 11부터 JavaFX가 JDK에서 분리되었으므로 추가 maven 아티팩트 org.openjfx : javafx-base가 필요합니다.
자바 6+
Java 6 이상 AbstractMap.SimpleImmutableEntry에서는 불변 쌍 또는 AbstractMap.SimpleEntry값을 변경할 수있는 쌍에 더 자세한 정보 를 사용할 수 있습니다. 이 클래스는 널 키와 널 값도 허용하며 직렬화 가능합니다.
기계적 인조 인간
Android 용으로 쓰고 있다면 Pair.create(key, value)불변 쌍을 만들기 위해 사용하십시오 .
아파치 커먼즈
Apache Commons LangPair.of(key, value)불변의 비교 가능한 직렬화 쌍을 만드는 데 도움이 됩니다.
이클립스 컬렉션
기본 요소가 포함 된 쌍을 사용하는 경우 Eclipse 콜렉션 는 비효율적 인 자동 복싱 및 자동 언 박싱을 피하는 매우 효율적인 기본 쌍 클래스를 제공합니다.
예를 들어, 당신은 사용할 수 PrimitiveTuples.pair(int, int)을 만들 IntIntPair거나 PrimitiveTuples.pair(float, long)을 만들 FloatLongPair.
롬복 프로젝트
Project Lombok을 사용하면 다음과 같이 간단히 작성하여 불변 쌍 클래스를 만들 수 있습니다.
@Value
public class Pair<K, V> {
K key;
V value;
}
롬복은 생성자, 게터에 채울 것 equals(), hashCode()그리고 toString()생성 된 바이트 코드에 자동으로 방법. 생성자 대신 정적 팩토리 메소드 (예 : a)를 원하면 Pair.of(k, v)주석을 다음과 같이 변경하십시오 @Value(staticConstructor = "of").
그렇지 않으면
위의 해결책 중 어느 것도 보트를 떠 올리지 않으면 다음 코드를 복사하여 붙여 넣을 수 있습니다 (허용 된 답변에 나열된 클래스와 달리 NullPointerExceptions을 방지합니다).
import java.util.Objects;
public class Pair<K, V> {
public final K key;
public final V value;
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
public boolean equals(Object o) {
return o instanceof Pair && Objects.equals(key, ((Pair<?,?>)o).key) && Objects.equals(value, ((Pair<?,?>)o).value);
}
public int hashCode() {
return 31 * Objects.hashCode(key) + Objects.hashCode(value);
}
public String toString() {
return key + "=" + value;
}
}