package rabbitescape.engine.util; import java.util.ArrayList; import java.util.List; public class DupeStringCounter { public final String[] deDuped; public final int[] freq; public <T> DupeStringCounter( Iterable<T> items ) { ArrayList<String> deDupedList = new ArrayList<String>(); ArrayList<Integer> freqList = new ArrayList<Integer>(); for ( T item : items ) { String s = item.toString(); int i = contains( s, deDupedList ); if ( -1 == i ) { deDupedList.add( s ); freqList.add( 1 ); } else { freqList.set( i, new Integer( freqList.get( i ) + 1 ) ); } } deDuped = deDupedList.toArray( new String[deDupedList.size()] ); freq = new int[freqList.size()]; for ( int i = 0; i < freq.length ; i++ ) { freq[i] = freqList.get( i ); } } public String join( String glue ) { StringBuilder ret = new StringBuilder(); boolean first = true; for ( int i = 0; i < deDuped.length ; i++ ) { if ( first ) { first = false; } else { ret.append( glue ); } if ( 1 < freq[i] ) { ret.append( freq[i] ); ret.append( ' ' ); } ret.append( deDuped[i] ); } return ret.toString(); } /** * @return The index of the first occurrence or -1 if it is not present. */ private static int contains( String string, List<String> strings) { for ( int i = 0; i < strings.size(); i++ ) { if ( strings.get( i ).equals( string ) ) { return i; } } return -1; } }