package com.shekhargulati.ninetynine_problems._01_lists; import java.util.ArrayList; import java.util.List; import java.util.Objects; /** * <b>(**) Pack consecutive duplicates of list elements into sublists</b> * <p>If a list contains repeated elements they should be placed in separate sublists.</p> * * <pre> * pack(Arrays.asList("a", "a", "a", "a", "b", "c", "c", "a", "a", "d", "e", "e", "e", "e")) * [["a","a","a","a"],["b"],["c","c"],["a","a"],["d"],["e","e","e","e"]] * </pre> */ public class P09 { /* Simple approach using for-each loop */ public static <T> List<List<T>> pack(List<T> list) { T lastElement = null; List<List<T>> packedList = new ArrayList<>(); List<T> elements = new ArrayList<>(); for (T el : list) { if (!Objects.equals(lastElement, el)) { elements = new ArrayList<>(); packedList.add(elements); } elements.add(el); lastElement = el; } return packedList; } }