2017-08-04 30 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 
    } 
});