是否可以在“Function.apply”方法中获取List中当前项的索引?

时间:2012-10-17 07:46:37

标签: java transform guava

我正在尝试将“转化”应用于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;
        }
    });

2 个答案:

答案 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而你实际上是在返回一个字符串。