package com.e2u.sort;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SectionSelectee
{
public List<Player> reqFirstPlayerList = null;
public List<Player> reqSecondPlayerList = null;
public SectionSelectee()
{
reqFirstPlayerList = new ArrayList<Player>();
reqSecondPlayerList = new ArrayList<Player>();
}
public void addPlayer(Player player)
{
if(player.requireFirstThisRound() > 0)
{
reqFirstPlayerList.add(player);
}
else
{
reqSecondPlayerList.add(player);
}
}
public void sort(Comparator<Player> comparator)
{
if(reqFirstPlayerList.size() > 1)
{
Collections.sort(reqFirstPlayerList, comparator);
}
if(reqSecondPlayerList.size() > 1)
{
Collections.sort(reqSecondPlayerList, comparator);
}
}
public boolean isBalance()
{
if(reqFirstPlayerList.size() > 0 && reqSecondPlayerList.size() > 0)
{
return true;
}
return false;
}
public List<Player> getLessPlayerList()
{
if(reqFirstPlayerList.size() <= reqSecondPlayerList.size())
{
return reqFirstPlayerList;
}
else
{
return reqSecondPlayerList;
}
}
public List<Player> getMorePlayerList()
{
if(reqFirstPlayerList.size() > reqSecondPlayerList.size())
{
return reqFirstPlayerList;
}
else
{
return reqSecondPlayerList;
}
}
public Player getFirstPlayer()
{
List<Player> lessPlayerList = getLessPlayerList();
if(!lessPlayerList.isEmpty())
{
return lessPlayerList.get(0);
}
else
{
return getMorePlayerList().get(0);
}
}
public Player getNextPlayer(Player player)
{
List<Player> lessPlayerList = getLessPlayerList();
List<Player> morePlayerList = getMorePlayerList();
int index = lessPlayerList.indexOf(player);
//Doesn't exist in less list
if(index == -1)
{
index = morePlayerList.indexOf(player);
//Doesn't exist in more list either.
if(index == -1)
{
throw new IllegalArgumentException("[Fatal]: Player doesn't exist in this section, player = " + player);
}
//last one, no next
if(index == morePlayerList.size() - 1)
{
return null;
}
else
{
return morePlayerList.get(index + 1);
}
}
else
{
//last one
if(index == lessPlayerList.size() - 1)
{
if(morePlayerList.isEmpty())
{
return null;
}
else
{
return morePlayerList.get(0);
}
}
return lessPlayerList.get(index + 1);
}
}
public String toString()
{
StringBuffer sb = new StringBuffer();
if(reqFirstPlayerList.size() <= reqSecondPlayerList.size())
{
for(int i = 0, size = reqFirstPlayerList.size(); i < size; i++)
{
sb.append(reqFirstPlayerList.get(i));
sb.append("\n");
}
for(int i = 0, size = reqSecondPlayerList.size(); i < size; i++)
{
sb.append(reqSecondPlayerList.get(i));
sb.append("\n");
}
}
else
{
for(int i = 0, size = reqSecondPlayerList.size(); i < size; i++)
{
sb.append(reqSecondPlayerList.get(i));
sb.append("\n");
}
for(int i = 0, size = reqFirstPlayerList.size(); i < size; i++)
{
sb.append(reqFirstPlayerList.get(i));
sb.append("\n");
}
}
return sb.toString();
}
}