package fj.demo; import fj.Function; import fj.Ord; import fj.data.List; import fj.data.TreeMap; import static fj.data.List.list; public final class List_groupBy { public static void main(final String... args) { keyDemo(); keyValueDemo(); keyValueAccDemo(); } private static void keyDemo() { System.out.println("KeyDemo"); final List<String> words = list("Hello", "World", "how", "are", "your", "doing"); final TreeMap<Integer, List<String>> lengthMap = words.groupBy(String::length, Ord.intOrd); lengthMap.forEach(entry -> System.out.println(String.format("Words with %d chars: %s", entry._1(), entry._2()))); } private static void keyValueDemo() { System.out.println("KeyValueDemo"); final List<Integer> xs = list(1, 2, 3, 4, 5, 6, 7, 8, 9); final TreeMap<Integer, List<String>> result = xs.groupBy(x -> x % 3, Integer::toBinaryString, Ord.intOrd); result.forEach(entry -> System.out.println(String.format("Numbers with reminder %d are %s", entry._1(), entry._2()))); } private static void keyValueAccDemo() { System.out.println("KeyValueAccDemo"); final List<String> words = list("Hello", "World", "how", "are", "your", "doing"); final TreeMap<Integer, Integer> lengthCounts = words.groupBy(String::length, Function.identity(), 0, (word, sum) -> sum + 1, Ord.intOrd); lengthCounts.forEach(entry -> System.out.println(String.format("Words with %d chars: %s", entry._1(), entry._2()))); } }