我对使用 Java 8 有点陌生,并且正在重构一些旧代码(这似乎是一个很好的用例)流操作。旧代码“有效”,但在我看来它看起来效率很低。
我的问题的简短版本是我试图找到 List 的单个元素并将其替换为同一元素的更新版本(键是相同的,但每次调用代码时属性都有不同的值) .
try
{
List<Object> items = lookup(itemCache.getKey());
for (int i = 0; i < items.size(); i++)
{
Object originalObject = items.get(i);
if (originalObject.getPropValue() == newObject.getPropValue())
{
List<Object> newItems = new ArrayList<>(items);
newItems.set(i, newObject);
putIntoCache(newObject.getKey(), newItems);
break;
}
}
}
catch (Exception ex) { /*exception handling*/ }
根据我到目前为止对流的了解,似乎我需要使用 .map()
或 .filter()
来隔离我想要识别的元素,但这似乎也是操作在流语句中的 filter
或 map
之后发生将在非完整列表或每个项目都受 .map()
影响的列表上运行。
这看起来很简单,但我正在努力解决这个问题。因为初始查找是 List
本身,所以我认为流可以取代所有这些。 ArrayList<>()
出现在原始代码中,但只要我能够用它的键替换该项目,项目的顺序并不重要。
如果您选择帮助,谢谢。
原文由 Patrick 发布,翻译遵循 CC BY-SA 4.0 许可协议
你可以简单地做: