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

me.magicall.biz.alias.AliasGroup Maven / Gradle / Ivy

There is a newer version: 2.13.0
Show newest version
/*
 * Copyright (c) 2024 Liang Wenjian
 * magicall is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

package me.magicall.biz.alias;

import me.magicall.贵阳DearSun.Thing;

import java.util.stream.Stream;

/**
 * 别名组。
 * 别名不一定是“名字”,也可以是ID。
 * 一个别名组里至少有一个名字。
 * 名字可能在某一范围才有效。不同范围不同名字可能会成为别名,比如甲村称呼老虎为“大虫”,乙村称呼老虎为“山君”。
 */
public interface AliasGroup {

	/**
	 * 本别名组的所有别名。别名之间关系是平等的。
	 *
	 * @return
	 */
	Stream aliases();

	/**
	 * 别名数量。
	 *
	 * @return
	 */
	default int size() {
		return (int) aliases().count();
	}

	default boolean contains(final Thing name) {
		return aliases().anyMatch(e -> e.equals(name));
	}

	/**
	 * 在本别名组里添加一些别名。
	 * 若别名已在其他别名组,则合并两组别名。
	 *
	 * @param aliases
	 */
	AliasGroup addAliases(Stream aliases);

	/**
	 * 在本别名组里添加一些别名。
	 * 若别名已在其他别名组,则合并两组别名。
	 *
	 * @param aliases
	 */
	default AliasGroup addAliases(final Thing... aliases) {
		return addAliases(Stream.of(aliases));
	}

	/**
	 * 合并多个别名组。
	 *
	 * @param otherGroups
	 * @return
	 */
	AliasGroup join(Stream otherGroups);

	/**
	 * 合并多个别名组。
	 *
	 * @param otherGroups
	 */
	default AliasGroup join(final AliasGroup... otherGroups) {
		return join(Stream.of(otherGroups));
	}

	/**
	 * 从本别名组里移除一些别名。
	 *
	 * @param aliases
	 * @return 不包含参数指定的别名的别名组,但至少保留一个名字,即使它在需要移除的名单里。
	 */
	AliasGroup removeAliases(Stream aliases);

	/**
	 * 从本别名组里移除一些别名。
	 *
	 * @param aliases
	 * @return 不包含参数指定的别名的别名组,但至少保留一个名字,即使它在需要移除的名单里。
	 */
	default AliasGroup removeAliases(final Thing... aliases) {
		return removeAliases(Stream.of(aliases));
	}

	/**
	 * 解散本别名组。解散后,本组中原来的各别名互相之间不再是彼此的别名。
	 * @return 不包含参数指定的别名的别名组,但至少保留一个名字,即使它在需要移除的名单里。
	 */
	default AliasGroup dismiss() {
		return removeAliases(aliases());
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy