我有两个自定义对象列表,它们都是
List<LogEntry>
。其中一个对象包含属性 typeOfException
、date
和 stackTrace
,而另一个对象只包含 typeOfException
和 stackTrace
。我想要做的是根据它们的 typeOfException
和 stackTrace
移除重复的日志条目。我定义唯一的堆栈跟踪方式是,如果第一个 'at line' 相同,则为唯一的。[25/05/21 10:28:41:481 BST] - IllegalStateException some text here
at com.google MyClass(Line 50)
[28/05/21 10:28:41:481 BST] - IllegalStateException some more text here
at com.google MyClass(Line 50)
被视为重复但是
[25/05/21 10:28:41:481 BST] - IllegalStateException some text here
at com.google MyClass(Line 50)
[28/05/21 10:28:41:481 BST] - IllegalStateException some more text here
at com.google MyClass(Line 50000)
这将被视为唯一的。
我有一个名为logEntries
的List<LogEntry>
,其中包含date
、typeOfException
和stackTrace
。我还有另一个名为logEntriesToCheckForDupes
的List<LogEntry>
,它是一个LogEntry
对象,但这次只包含typeOfException
和stackTrace
中顶部的行(注意所有属性都是字符串)。
到目前为止,我写出的代码如下:
HashSet<Object> uniqueStackTraces =new HashSet<>();
logEntryObjectsToCheckForDupes.removeIf(c -> !uniqueStackTraces.add(Arrays.asList(c.getTypeOfexception(), c.getStackTrace())));
我认为下面的代码可以工作(虽然我还不完全相信,因为异常从887个减少到了14个)。有没有一种方法/逻辑来查找每个唯一条目的索引。那样的话,我就不需要创建一个新的HashSet了,而是可以只存储唯一索引的列表,并从logEntries
中创建一个List<LogEntry>
的对象,其中每个对象都具有唯一的索引?
我感到很困惑,不确定我的代码是否按照预期工作,所以非常感谢任何建议/输入。这个问题类似于 (在Java 8中基于多个属性从对象列表中删除重复项),并且我从中使用了一些逻辑。