2016-12-18 4 views
0

コレクションを小さなパーティションに分割したい。私は、この目的のために次のメソッドを作成しました:Javaをコレクションを一般的な基底型の同じサイズの小さな部分に分割する

/** 
* Splits collection into smaller collections of given size 
* @param c input collection 
* @param partitionSize partition maximum size 
* @return collection of collections 
*/ 
private static Collection<Collection<MyClass>> splitCollection(Collection<MyClass> c, int partitionSize) { 
    List<Collection<MyClass>> result = new ArrayList<>(); 
    List<MyClass> partition = new ArrayList<>(); 
    for (MyClass o : c) { 
    if (partition.size() == partitionSize) { 
     result.add(partition); 
     partition = new ArrayList<>(); 
    } 
    partition.add(o); 
    } 
    if (!partition.isEmpty()) { 
    result.add(partition); 
    } 
    return result; 
} 

今、私はこのような何かを呼び出すことができるようにするために、一般的(基本型の独立した)関数を作成したい:

List<Collection<MyClass>> result = splitCollection(myClassList, 500, MyClass.class); 
List<Collection<MyClass2>> result = splitCollection(myClass2List, 500, MyClass2.class); 

しかし、どのようにすることができます私は多型を使用したくない場合(私の型をObjectで置き換える)、これを実現しますか?

+0

(http://docs.oracle .com/javase/tutorial/java/generics /)。 – greybeard

答えて

2

何がやりたいことはGenericsを使用している:

private static <T> Collection<Collection<T>> splitCollection(Collection<T> c, int partitionSize) { 
    List<Collection<T>> result = new ArrayList<>(); 
    List<T> partition = new ArrayList<>(); 
    for (T o : c) { 
     if (partition.size() == partitionSize) { 
      result.add(partition); 
      partition = new ArrayList<>(); 
     } 
     partition.add(o); 
    } 
    if (!partition.isEmpty()) { 
     result.add(partition); 
    } 
    return result; 
} 

として、あなたはそれを呼び出すことができます:Javaは[ジェネリックで刺し]を作っ

Collection<Collection<Integer>> lsts = splitCollection(Arrays.asList(1,2,3,4), 2); 
Collection<Collection<String>> lsts = splitCollection(Arrays.asList("1","2","3","4"), 2); 
+1

これは私があなたに感謝したことです:) – Michal

関連する問題