java数值答案对比_使用Java 8流根据元素之间的差异将数字的有...

好吧,我只能想到一个自定义收集器,因为您需要一些以前的状态,但是到目前为止,这还不够简洁(除非您将其隐藏在方法后面):

private static Collector>> diffCollector() {

class Acc {

private Integer previous;

private List> result = new ArrayList<>();

void accumulate(Integer elem) {

if (previous == null) {

previous = elem;

List list = new ArrayList<>();

list.add(previous);

result.add(list);

return;

}

if (elem - previous > 2) {

List oneMore = new ArrayList<>();

oneMore.add(elem);

result.add(oneMore);

previous = elem;

} else {

result.get(result.size() - 1).add(elem);

previous = elem;

}

}

Acc combine(Acc other) {

throw new UnsupportedOperationException("Not for parallel");

}

List> finisher() {

return result;

}

}

return Collector.of(Acc::new, Acc::accumulate, Acc::combine, Acc::finisher);

}

用法将是:

List myList = Arrays.asList(1, 2, 3, 7, 9, 12, 13, 15);

System.out.println(myList.stream().collect(diffCollector()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值