我有一个需求,希望使用Java Stream API处理系统中的事件流,并应用数据清理过程来删除重复的事件。
这是针对连续出现的相同事件而言,而不是创建一个不同事件的列表。大多数在线可用的Java Stream API示例都旨在从给定输入中创建不同输出。
例如,对于输入流
[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]
我的当前实现(不使用Stream 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]
我尝试了各种使用reduce、groupingBy等的示例,但都没有成功。似乎找不到一种方法来将流与累加器中的最后一个元素进行比较,如果有这样的可能性。