小编Buc*_*uck的帖子

Java collection pack()方法

pack()使用Java流实现集合操作的好方法是什么?这是我想要完成的事情:

List<String> items = Arrays.asList("A", "A", "B", "B", "A", "C", "C", "A", "A", "A");
List<List<String>> packs = items.stream().pack();
// packs:  [[A,A],[B,B],[A],[C,C],[A,A,A]]
Run Code Online (Sandbox Code Playgroud)

或者,pack操作可以以(index,element,count)的形式返回元组列表:

[(0, A, 2), (2, B, 2), (4, A, 1), (5, C, 2), (7, A, 3)]
Run Code Online (Sandbox Code Playgroud)

目前我使用可变累加器以下列方式实现了这个:

Packer<String> packer = new Packer<>();
items.stream().forEach(packer);
List<Triple<Integer, T, Integer>> packs = packer.get();

public class Packer<T> implements Consumer<T>, Supplier<List<Triple<Integer, T, Integer>>>
{
    private List<Triple<Integer, T, AtomicInteger>> result = new ArrayList<>();
    private Optional<Triple<Integer, T, AtomicInteger>> currentElement = Optional.empty();
    private int count …
Run Code Online (Sandbox Code Playgroud)

java collections java-stream

5
推荐指数
1
解决办法
200
查看次数

标签 统计

collections ×1

java ×1

java-stream ×1