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

sx.blah.discord.util.LongMapCollector Maven / Gradle / Ivy

Go to download

A Java binding for the official Discord API, forked from the inactive https://github.com/nerd/Discord4J. Copyright (c) 2017, Licensed under GNU LGPLv3

The newest version!
package sx.blah.discord.util;

import sx.blah.discord.handle.obj.IIDLinkedObject;
import sx.blah.discord.util.cache.LongMap;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;

/**
 * A collector to build a {@link LongMap} from a stream of {@link IIDLinkedObject IIDLinkedObjects}.
 *
 * @param  The type of ID linked object.
 */
public class LongMapCollector implements Collector, LongMap> {

	private LongMapCollector() {

	}

	@Override
	public Supplier> supplier() {
		return ArrayList::new;
	}

	@Override
	public BiConsumer, T> accumulator() {
		return List::add;
	}

	@Override
	public BinaryOperator> combiner() {
		return (left, right) -> {
			left.addAll(right);
			return left;
		};
	}

	@Override
	public Function, LongMap> finisher() {
		return ts -> {
			LongMap map = LongMap.newMap();
			for (T t : ts) {
				map.put(t.getLongID(), t);
			}
			return map;
		};
	}

	@Override
	public Set characteristics() {
		return EnumSet.of(Characteristics.UNORDERED);
	}

	public static  Collector> toLongMap() {
		return new LongMapCollector<>();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy