package com.interview.flag.g;
import com.interview.utils.ConsoleWriter;
import java.util.*;
/**
* Created by stefanie on 1/28/15.
*/
public class G49_ListClustering<T> {
public Collection<List<T>> clustering(T[] elements, List<T> list){
HashMap<T, Boolean> members = new HashMap();
for(int i = 0; i < elements.length; i++) members.put(elements[i], false);
HashMap<T, List<T>> cluster = new HashMap();
for(int i = 0; i < elements.length; i++){
if(members.get(elements[i])) continue;
members.put(elements[i], true);
List<T> subset = new ArrayList();
subset.add(elements[i]);
Iterator<T> itr = list.iterator();
while(itr.hasNext() && !itr.next().equals(elements[i]));
while(itr.hasNext()){
T next = itr.next();
if(!members.containsKey(next)) break;
if(members.get(next)){
subset.addAll(cluster.get(next));
cluster.remove(next);
break;
} else {
subset.add(next);
members.put(next, true);
}
}
cluster.put(elements[i], subset);
}
return cluster.values();
}
public static void main(String[] args){
G49_ListClustering<Character> cluster = new G49_ListClustering();
Character[] elements = new Character[]{'D', 'E', 'F', 'J', 'G', 'H', 'C'};
List<Character> list = Arrays.asList(new Character[]{'A','B','C','D','E','F','G','H','I','J','K'});
Collection<List<Character>> clusters = cluster.clustering(elements, list);
for(List<Character> subset : clusters){
ConsoleWriter.printCollection(subset);
}
}
}