package com.opendoorlogistics.core.utils;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.TreeMap;
public class MultiTreeSet<T> {
private int size;
private TreeMap<T , LinkedList<T>> map = new TreeMap<T, LinkedList<T>>();
private boolean lineSeparatorInToString;
public void add(T obj){
LinkedList<T> list = map.get(obj);
if(list == null){
list = new LinkedList<T>();
map.put(obj, list);
}
list.add(obj);
size++;
}
public T pollFirst(){
Entry<T,LinkedList<T>> entry = map.firstEntry();
T ret = entry.getValue().removeFirst();
if(entry.getValue().size()==0){
map.pollFirstEntry();
}
size--;
return ret;
}
public int size(){
return size;
}
public T last(){
Entry<T,LinkedList<T>> entry = map.lastEntry();
if(entry!=null){
return entry.getValue().getLast();
}
return null;
}
public T first(){
Entry<T,LinkedList<T>> entry = map.firstEntry();
if(entry!=null){
return entry.getValue().getFirst();
}
return null;
}
public void clear(){
map.clear();
size=0;
}
@Override
public String toString(){
StringBuilder b = new StringBuilder();
for(List<T> list : map.values()){
for(T entry:list){
if(lineSeparatorInToString){
if(entry!=null){
b.append( entry );
}
b.append(System.lineSeparator());
}else{
b.append("[" + entry + "], " );
}
}
}
return b.toString();
}
public boolean isLineSeparatorInToString() {
return lineSeparatorInToString;
}
public void setLineSeparatorInToString(boolean lineSeparatorInToString) {
this.lineSeparatorInToString = lineSeparatorInToString;
}
}