簡體   English   中英

[Ljava.lang.Object; 無法轉換為 java.util.Collection

[英][Ljava.lang.Object; cannot be cast to java.util.Collection

我正在嘗試將 Array_AGG 實現為 CombineFn,下面是我的代碼:

    public static class ArrayAggArray extends Combine.CombineFn<Object, List<Object>, Object[]> {
    @Override
    public List<Object> createAccumulator() {
      return new ArrayList<>();
    }

    @Override
    public List<Object> addInput(List<Object> accum, Object input) {
      accum.add(input);
      return accum;
    }

    @Override
    public List<Object> mergeAccumulators(Iterable<List<Object>> accums) {
      List<Object> merged = new ArrayList<>();
      for (List<Object> accum : accums) {
        merged.add(accum);
      }
      return merged;
    }

    @Override
    public Object[] extractOutput(List<Object> accumulator) {
      return accumulator.toArray();
    }
  }

當我運行測試時,我得到了java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.Collection java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.Collection

我懷疑我們無法創建 Iterable<List>。 任何其他幫助/輸入將不勝感激。

您的代碼有問題,您試圖將List<Object> List<Object>集合中的元素,這就是為什么您在此處出現錯誤的原因:

@Override
public List<Object> mergeAccumulators(Iterable<List<Object>> accums) {
    List<Object> merged = new ArrayList<>();
    for (List<Object> accum : accums) {
        merged.add(accum);
    }
    return merged;
}

merged后的 object 具有List<Object>類型,但您的accum也具有List<Object>類型,因此它不能將一個轉換為另一個。

根據您想做什么,您必須對accum的元素進行另一個循環,例如:

@Override
public List<Object> mergeAccumulators(Iterable<List<Object>> accums) {
    List<Object> merged = new ArrayList<>();
    for (List<Object> accum : accums) {
        for (Object o : accum) {
            merged.add(o);
        }
    }
    return merged;
}

或者您可以使用addAll或您希望它執行的其他方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM