sx.blah.discord.util.LongMapCollector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Discord4J Show documentation
Show all versions of Discord4J Show documentation
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<>();
}
}