/*
|
* Copyright (c) 2018-2028, DreamLu All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
* Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in the
|
* documentation and/or other materials provided with the distribution.
|
* Neither the name of the dreamlu.net developer nor the names of its
|
* contributors may be used to endorse or promote products derived from
|
* this software without specific prior written permission.
|
* Author: DreamLu 卢春梦 (596392912@qq.com)
|
*/
|
package org.springblade.core.tool.tuple;
|
|
import lombok.*;
|
|
/**
|
* tuple Pair
|
*
|
* @author L.cm
|
**/
|
@Getter
|
@ToString
|
@EqualsAndHashCode
|
public class Pair<L, R> {
|
private static final Pair<Object, Object> EMPTY = new Pair<>(null, null);
|
|
private final L left;
|
private final R right;
|
|
/**
|
* Returns an empty pair.
|
*/
|
@SuppressWarnings("unchecked")
|
public static <L, R> Pair<L, R> empty() {
|
return (Pair<L, R>) EMPTY;
|
}
|
|
/**
|
* Constructs a pair with its left value being {@code left}, or returns an empty pair if
|
* {@code left} is null.
|
*
|
* @return the constructed pair or an empty pair if {@code left} is null.
|
*/
|
public static <L, R> Pair<L, R> createLeft(L left) {
|
if (left == null) {
|
return empty();
|
} else {
|
return new Pair<>(left, null);
|
}
|
}
|
|
/**
|
* Constructs a pair with its right value being {@code right}, or returns an empty pair if
|
* {@code right} is null.
|
*
|
* @return the constructed pair or an empty pair if {@code right} is null.
|
*/
|
public static <L, R> Pair<L, R> createRight(R right) {
|
if (right == null) {
|
return empty();
|
} else {
|
return new Pair<>(null, right);
|
}
|
}
|
|
public static <L, R> Pair<L, R> create(L left, R right) {
|
if (right == null && left == null) {
|
return empty();
|
} else {
|
return new Pair<>(left, right);
|
}
|
}
|
|
private Pair(L left, R right) {
|
this.left = left;
|
this.right = right;
|
}
|
|
}
|