我试图在遍历它的列表时更新bean的属性(如果它满足条件)。为了提高性能,我使用了Lists.transform
private void populate(final WorkFlowDataBean workFlowDataBean, final List<ApplicationDataBean> items) {
Lists.transform(items, new Function<ApplicationDataBean, ApplicationDataBean>() {
@Override
public ApplicationDataBean apply(ApplicationDataBean input) {
if (String.valueOf(workFlowDataBean.getId().intValue()).equalsIgnoreCase(String.valueOf(input.getWorkflowId().intValue()))) {
input.setWorkflowName(workFlowDataBean.getName());
input.setWorkflowVersion(workFlowDataBean.getVersion());
logger.info("---finally----");
}
logger.info(String.valueOf(workFlowDataBean.getId().intValue()) + "===" + String.valueOf(input.getWorkflowId().intValue()));
return input;
}
});
}
我不能使用foreach循环,因为它会减慢我的应用程序的速度。
最佳答案
Lists.transform()实际上将返回列表的惰性计算视图,这意味着apply()
中的所有内容仅在您开始迭代转换的集合时发生。因此,您不能以现在使用的方式使用该方法,因为如果不使用转换后的List则不会调用apply()
。
要解决此问题,您可以尝试根据转换后的集合创建一个新列表(也将其丢弃):
Lists.newArrayList(Lists.transform(
/*Your transformation code*/
));
更好的长期解决方案是重新考虑整个方法。也就是说,您应该只在方法中使用for-each循环,而不要将代码包装到函数中。在这种情况下,普通的命令式代码将更易于阅读,并且性能也更好。