In this example, we will be making grouping easy to use on Maps objects that contain collections as values.
For instance, we hava a Map of Integers, that has its values as an ArrayList of Strings :
Grouper<Integer, String> grouper = new ArrayListGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
The output will be :
{1=[a, b, c, c], 2=[c]}
All we have to do, is to define a grouping strategy, for example the already defined ArrayListGrouper class uses an ArrayList as its strategy.
We can always define a new Grouper that will use another
GroupingStrateg.
Let's change the ArrayList to a HashSet, so that the elements become unique :
public class HashSetGrouper<K, V> extends Grouper<K, V> {
public HashSetGrouper() {
super(HashSet::new);
}
}
Testing it like :
@Test
public void testHashSetGrouper() {
Grouper<Integer, String> grouper = new HashSetGrouper<>();
grouper.put(1, "a");
grouper.put(1, "b");
grouper.put(1, "c");
grouper.put(1, "c");
grouper.put(2, "c");
System.out.println(grouper);
}
The output will become :
{1=[a, b, c], 2=[c]}
The 1 key has now a set in which the "c" value is not repeated.
the code is hosted on Github : https://github.com/BelmoMusta/java-Grouper
Your feedback is welcomed.
Top comments (0)