Guava学习笔记-预览迭代器中的下一个元素

###问题描述:
去除List中连续的重复元素
["1","1","1","2”,"2","3","4"]->["1","2","3","4"]
[]->[]

###原来

List<String> result = Lists.newArrayList();
Iterator<String> iterator = source.iterator();
String current = null;
while (iterator.hasNext()) {
    if (current == null) {
        current = iterator.next();
    }
    result.add(current);
    while (iterator.hasNext()) {
        String next = iterator.next();
        if (current.equals(next)) {
            continue;
        }
        current = next;
        break;
    }
}
if (current != null && !result.get(result.size() - 1).equals(current)) {
    result.add(current);
}

因为需要在下一个元素与当前元素不相等的时候保留上一个元素,所以写起来比较复杂用了两层循环,并且容易写错,改了好几遍才通过测试用例

###使用Guava

List<String> result = Lists.newArrayList();
PeekingIterator<String> iterator = Iterators.peekingIterator(source.iterator());
String current = null;
while (iterator.hasNext()) {
    if (!iterator.peek().equals(current)) {
        current = iterator.next();
        result.add(current);
    } else {
        iterator.next();
    }
}

使用PeekingIterator,代码精简许多,也更易于理解,也不容易写错
需要注意的是,如果没有下一个元素了,使用iterator.peek()会抛出异常

转载于:https://my.oschina.net/u/565871/blog/608393

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值