我正在尝试将“转化”应用于List <Map <String, String>>
。是否可以在“Function.apply
”方法中获取列表中当前项的索引?
Lists.transform(data, new Function<Map<String, String>, Map<String, String>>() {
private static int index = 0;
@Override
public Map<String, String> apply(Map<String, String> from) {
from.put(key, value); // need to get index
return from;
}
});
答案 0 :(得分:8)
通常在Java中,使用循环更简单,更清晰。
List<Map<String, String>> data = ...
for(int i = 0; i < data.size(); i++) {
// i is the index.
data.get(i).put(key, value);
}
我应该说我赞成使用支持它的语言进行函数式编程。 Java 7不适合函数式编程,有时你不得不求助于迭代。 Java 8和9承诺在添加闭包时更加功能性编程。
恕我直言Java甚至不支持递归以及许多语言。 JVM中缺少tail call elimination是一个缺陷。
答案 1 :(得分:0)
如果您的Function.apply
旨在返回Map
,您如何动态更改方法签名?如果不需要做Einstien,尽量做到尽可能简单。您可以考虑使用Mr.Peter建议的循环。另外我觉得你的代码不能编译,因为你的方法返回一个Map而你实际上是在返回一个字符串。