Guava學習筆記-預覽迭代器中的下一個元素

###問題描述:
去除List中連續的重複元素
["1","1","1","2」,"2","3","4"]->["1","2","3","4"]
[]->[]測試

###原來code

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);
}

由於須要在下一個元素與當前元素不相等的時候保留上一個元素,因此寫起來比較複雜用了兩層循環,而且容易寫錯,改了好幾遍才經過測試用例get

###使用Guavait

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()會拋出異常class

相關文章
相關標籤/搜索