如何避免在番石榴中使用lalsily Lists.transform?

Map map = Maps.newHashMap(); map.put("test","123"); map.put("fuyou001","456"); map.put("id",145); List<Map> list = Lists.newArrayList(); list.add(map); Lists.transform(list, new Function<Map, Object>() { @Override public Object apply(@Nullable Map input) { System.out.println("test:" + input); return input; } }); System.out.println(list);` 

控制台不显示“test ….”

如何避免懒惰应用
我也试试

 List<Map> newList = new ArrayList<Map>(list.size()); Collections.copy(newList,list); 

但没有效果

Function一般不应该有副作用; 那是你真正的问题。

也就是说,如果你坚持立即应用转换,请复制: Lists.newArrayList(Lists.transform(list, function))

使用ImmutableList会强制计算值,因此之后不需要额外的副本。 这可能是一个更优雅的解决方案:

 list = ImmutableList.copyOf(Lists.transform(list, new Function, Object>() { @Override public Object apply(@Nullable Map input) { System.out.println("test:" + input); return input; } })); System.out.println(list);` 

为了补充路易斯的答案,你使用Lists.transform()就好像它修改了原始list ,比如Collections.sort() 。 它没有。

您必须使用Lists.transform()的返回值来查看发生的事情,请记住它是一个视图 ,每次调用它时都会对其进行评估。 因此,如果你需要多次使用结果,就像路易斯所说,在新的ListArrayListImmutableList等)中做一个副本。