【问题标题】:List to Map giving compilation errorList to Map 给出编译错误
【发布时间】:2017-08-04 18:00:58
【问题描述】:

我有以下代码:

List<Object> result = new ArrayList<Object>();

//Object is actually a Map<String,Object>

return Maps.uniqueIndex(result, new Function<Map<String, Object>, Long>() {
            @Override
            public Long apply(Map<String, Object> input) {
                return (Long) input.remove("id");
            }
        });

我得到编译错误。

Maps 类型中的方法uniqueIndex(Iterable&lt;V&gt;, Function&lt;? super V,K&gt;) 不适用于参数(List, new Function&lt;Map&lt;String,Object&gt;,Long&gt;(){})。

如何重写这段代码以免陷入这个问题?

【问题讨论】:

  • 那段代码应该做什么,似乎没有多大意义。
  • 转换列表以映射和过滤列表。
  • 这还不清楚。请显示输入+输出的示例。
  • 顺便说一句,我在这里看到的最大的禁忌是从 Object 到 Long 的演员表和 List&lt;Object 显然只包含 Longs 但没有以明确的方式输入。

标签: collections java-8 guava


【解决方案1】:

Function 的第一个泛型参数必须与List 持有的元素类型匹配。

所以,如果你有一个List&lt;T&gt;,Function 将用于处理来自该List 的元素,因此它需要是一个Function&lt;T, WHATEVER&gt;。

所以,在你的情况下:

List<Object> result = new ArrayList<>();

Maps.uniqueIndex(result, new Function<Object, WHATEVER>() {
    @Nullable
    @Override
    public WHATEVER apply(@Nullable Object s) {
        return null; // do whatever you want here
    }
});

如果您想将Map&lt;String,Object&gt; 存储在List 中,为什么不使用List&lt;Map&lt;String,Object&gt;&gt;?

List<Map<String,Object>> result = new ArrayList<>();

Maps.uniqueIndex(result, new Function<Map<String,Object>, WHATEVER>() {
    @Nullable
    @Override
    public WHATEVER apply(@Nullable Map<String,Object> s) {
        return null; // do whatever you want here
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 2023-03-26
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多