

**Listの値が違う所でsplitをする方法**  
現在`List<Integer>`に  
`{1, 1, 1, 2, 2, 3, 3, 3, 3}`  
といった形で値が入っています。

これを 1 と 2 の間で、 2 と 3 の間それぞれで分割して、`List<List<Integer>>`と返すことは出来ないのでしょうか。。？

**ほしい結果**

[code]

    {
    [1, 1, 1],
    [2, 2],
    [3, 3, 3, 3]
    }
    
[/code]

言語はJava,Kotlinを使用しています。


CC BY-SA 4.0
2018-10-25T09:09:58.480
49647
2019-07-03T09:10:01.503
2018-10-25T09:40:56.750
2238
30689
question
java kotlin
Listの値が違う所でsplitをする方法


特に工夫なくやれば、こんな感じですかね。

[code]

    private List<List<Integer>> convert(List<Integer> originalList) {
        if (originalList == null) {
            return null;
        }
        List<List<Integer>> newList = new ArrayList<>();
        Integer tmpNum = null;
        List<Integer> tmpList = null;
        for (Integer integer : originalList) {
            if (tmpNum == null || integer.compareTo(tmpNum) != 0) {
                tmpList = new ArrayList<>();
                newList.add(tmpList);
            }
            tmpList.add(integer);
            tmpNum = integer;
        }
        return newList;
    }
    
[/code]


CC BY-SA 4.0
2018-10-25T13:46:54.007
49657
2018-10-25T13:46:54.007
23994
49647
answer


splitという意味では正しくないですが、 `groupingBy 自分` でどうでしょうか。

[code]

        final List<Integer> nums = new Random().ints(10, 1, 4).boxed().collect(Collectors.toList());
        System.out.println(nums); // [1, 2, 3, 3, 1, 2, 2, 1, 2, 3]
    
        final Map<Integer, List<Integer>> group = nums.stream().collect(Collectors.groupingBy(Function.identity()));
        System.out.println(group.values()); // [[1, 1, 1], [2, 2, 2, 2], [3, 3, 3]]
    
[/code]


CC BY-SA 4.0
2019-07-03T09:10:01.503
56350
2019-07-03T09:10:01.503
2808
49647
answer