我有一個要求,我希望使用Java Stream Api來處理來自系統的事件流,並應用數據清理過程來刪除重複的事件。 這是按順序重複多次刪除相同的事件,而不是創建不同事件的列表。大多數可在線提供的Java Stream api示例旨在創建來自給定輸入的獨特輸出。Java 8 - 從列表中刪除重複的元素序列
實施例,對輸入流
[A,B,C,A,A,A,A,d,d,d,C,C,E,E,E,E,E, E,F,F,F]
輸出列表或流應是
[A,b,C,A,d,C,E,F]
我的cu rrent執行(不使用流API)看起來像
public class Test {
public static void main(String[] args) {
String fileName = "src/main/resources/test.log";
try {
List<String> list = Files.readAllLines(Paths.get(fileName));
LinkedList<String> acc = new LinkedList<>();
for (String line: list) {
if (acc.isEmpty())
acc.add(line);
else if (! line.equals(acc.getLast()))
acc.add(line);
}
System.out.println(list);
System.out.println(acc);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
輸出,
[a, b, c, a, a, a, a, d, d, d, c, c, e, e, e, e, e, e, f, f, f]
[a, b, c, a, d, c, e, f]
我試着減少,groupingBy等各種例子,但沒有成功。如果存在這樣的可能性,我似乎無法找到一種方法來比較流與我的累加器中的最後一個元素。
作爲一個提示,請考慮閱讀[「何時使用ArrayList上的LinkedList?」](http://stackoverflow.com/q/322715/2711488)。簡單地說,你幾乎從不想使用'LinkedList' ... – Holger
重複項目是否必須連續?你可以在「d」之後加入另一個「a」嗎?如果,它是否應該被刪除? – Mureinik
@Mureinik聲明*「這是刪除相同的事件重複多次的順序*」已經涵蓋了IMO的這種情況。 – CKing