Skip to content

Instantly share code, notes, and snippets.

@pdemanget
Last active April 15, 2016 08:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pdemanget/18cd1df4d69c4ef9cfa64287511a14de to your computer and use it in GitHub Desktop.
Save pdemanget/18cd1df4d69c4ef9cfa64287511a14de to your computer and use it in GitHub Desktop.
Java Stream grouping by multiple fields
/**
* Group on 2 levels
*/
protected <K,V> Map<K, Map<K,List<V>>> groupByFields2 (List<V> modelList,Function<? super V, ? extends K> classifier1,Function<? super V, ? extends K> classifier2) {
Collector<V, ?, Map<K, List<V>>> groupingBy2 = Collectors.groupingBy(classifier2);
Collector<V, ?, Map<K, Map<K,List<V>>>> groupingBy = Collectors.groupingBy(
classifier1
,groupingBy2
);
return modelList.stream().collect(groupingBy);
}
/* Simple Example */
public static void main (String[] args) {
Map map = groupByFields2(new ArrayList(Currency.getAvailableCurrencies()) , Currency::getDefaultFractionDigits, Currency::getDisplayName);
System.out.println(map.toString().replace("{","\n{"));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment