【发布时间】:2019-01-25 08:56:46
【问题描述】:
我正在尝试学习如何使用 lambda 函数来编写更简洁的代码,但很难做到这一点。
我有两个列表。 “旧”列表总是比“更新列表”更短或长度相同。 我想从“更新列表”中获取对象并覆盖较短的“旧列表”中的“陈旧对象”。 列表中的每个对象都有一个唯一字段。
例如,这有点像用新版本更新图书馆中的书籍。 UUID(标题+作者)保持不变,但新对象用新书/对象替换了书架上的旧对象。
我知道我可以“走很长一段路”并创建一个HashMap<MyUniqueFieldInMyObject, MyObject>,然后使用新的List<MyUpdatedObjects> 并做同样的事情。
即拥有HashMap<UniqueField, MyOldObject> 和HashMap<UniqueField, MyUpdatedObject>,然后使用伪“如果更新的对象具有具有相同键的条目,则用更新的值覆盖值”来遍历旧对象...
但是……
有没有一种“更好”的简短方式来使用函数式 lambda 语句来做到这一点?
我的想法是:
List<MyObject> updatedList;
List<MyObject> oldList;
updatedList.forEach(MyObject -> {
String id = MyObject.getId();
if (oldList.stream().anyMatcher(MyObject ->
MyObject.getId().matches(id)) {
//Do the replacement here? If so...how?
}
}
这是我迷路的地方!
感谢您的指导。
【问题讨论】:
-
如果旧列表中没有新书会怎样?要将其添加到旧列表中吗?
-
没有。我只想更新旧列表中当前的那些。
-
好的。如果这本书在旧列表中,它肯定在新列表中吗?
-
没有。但我将在单独的步骤中删除旧列表中不在新列表中的书籍。 IE。这就像一家书店供应商提供其整个书库的大型目录,但图书馆只对更新它当前拥有且可以更新的目录感兴趣。
标签: java list lambda java-8 java-stream