All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.andyshao.util.stream.Pair Maven / Gradle / Ivy

The newest version!
package com.github.andyshao.util.stream;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import java.util.Objects;
import java.util.Optional;
import java.util.function.Supplier;

/**
 * 
 * 
 * Title:
* Descript:
* Copyright: Copryright(c) May 27, 2019
* Encoding: UNIX UTF-8 * * @author Andy.Shao * * @param first object type * @param second object type */ @Getter @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public final class Pair { private final F first; private final S second; /** * build {@link Pair} * @param first first item * @param second second item * @return {@link Pair} * @param first type * @param second type */ public static Pair of(F first, S second) { return new Pair(first, second); } /** * get first or default * @param def default value * @return first or default value */ public F getFirstOrDefault(F def) { return Objects.isNull(this.first) ? def : this.first; } /** * compute first if absence * @param supplier default value function * @return first or default value */ public F computeFirstIfAbsence(Supplier supplier) { Optional ops = this.getFirstOps(); if(ops.isPresent()) return ops.get(); return supplier.get(); } /** * get second or default * @param def default value * @return sencond or default value */ public S getSecondOrDefault(S def) { return Objects.isNull(this.second) ? def : this.second; } /** * compute second if absence * @param supplier default value function * @return second value */ public S computeSecondIfAbsence(Supplier supplier) { Optional ops = this.getSecondOps(); if(ops.isPresent()) return ops.get(); return supplier.get(); } /** * get first * @return first value */ public Optional getFirstOps() { return Optional.ofNullable(this.first); } /** * get second * @return second value */ public Optional getSecondOps() { return Optional.ofNullable(this.second); } }