1

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

2 回答 2

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 中缺少尾调用消除是一个缺陷。

于 2012-10-17T07:56:31.157 回答
0

如果您Function.apply的设计旨在返回 a Map,您如何动态更改方法签名?如果不需要做爱因斯坦,请尽量简单。您可以考虑使用 Mr.Peter 建议的循环。另外我觉得你的代码不会编译,因为你的方法返回一个 Map 而你实际上是返回一个字符串。

于 2012-10-17T08:03:21.253 回答