2017-08-04 29 views
0

我有以下代码:清单地图给编译错误

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<V>, Function<? super V,K>)不适用于参数(List, new Function<Map<String,Object>,Long>(){})

我该如何重写这段代码以避免这个问题?

+0

这是什么代码*假设*做,似乎没有多大意义。 – luk2302

+0

转换列表来映射和过滤列表。 – krupalpatel86

+0

这还不清楚。请显示输入+输出的例子。 – luk2302

回答

2

Function的第一个通用参数必须与List所拥有的元素类型相匹配。

所以,如果你有一个List<T>,一个Function将被用来做与来自List元素的东西,因此它需要一个Function<T, WHATEVER>

所以,你的情况:

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<String,Object>List为什么不使用List<Map<String,Object>>

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 
    } 
});