###問題描述:
去除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