互いに隣接している**のみ**繰り返しの要素をグループ化することによってサブリストにリストを分割

wannaBeDev:

グループ化してサブリストにリストを分割するための簡単な方法があるだけで、互いに隣接する繰り返し要素は?

文字列のfolowingリストを使用した単純な例:

Input:  [RED,RED,BLUE,BLUE,BLUE,GREEN,BLUE,BLUE,RED,RED]

Output:  [[RED,RED],[BLUE,BLUE,BLUE],[GREEN],[BLUE,BLUE],[RED,RED]]

私はJavaからgroupingByを使用している場合、私は避けたい同じサブリストになってしまいます等しいすべての要素を、ストリーム。何か案は?

Eng.Fouad:

カスタムコレクタを作成することができます。

List<String> input = Arrays.asList("RED", "RED", "BLUE", "BLUE", "BLUE", "BLUE", "RED", "RED");
List<List<String>> output = input.stream()
                                  .collect(Collector.of(ArrayList::new, (accumulator, item) ->
                                  {
                                      if(accumulator.isEmpty())
                                      {
                                          List<String> list = new ArrayList<>();
                                          list.add(item);
                                          accumulator.add(list);
                                      }
                                      else
                                      {
                                          List<String> last = accumulator.get(accumulator.size() - 1);
                                          if(last.isEmpty() || last.get(0).equals(item)) last.add(item);
                                          else
                                          {
                                              List<String> list = new ArrayList<>();
                                              list.add(item);
                                              accumulator.add(list);
                                          }
                                      }
                                  }, (left, right) -> {left.addAll(right); return left;}));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=31432&siteId=1