OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / kgram / src / main / java / jp / sourceforge / stigmata / birthmarks / kgram / KGramBuilder.java
1 package jp.sourceforge.stigmata.birthmarks.kgram;
2
3 import java.util.LinkedHashSet;
4 import java.util.List;
5 import java.util.Set;
6
7 /**
8  * @author Haruaki Tamada
9  */
10 public class KGramBuilder{
11     private static final KGramBuilder builder = new KGramBuilder();
12
13     /**
14      * private constructor for singleton pattern.
15      */
16     private KGramBuilder(){
17     }
18
19     public static KGramBuilder getInstance(){
20         return builder;
21     }
22
23     @SuppressWarnings("unchecked")
24     public <T> KGram<T>[] buildKGram(T[] values, int kvalue){
25         Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
26
27         if(values.length >= kvalue){
28             int max = values.length - (kvalue - 1);
29             for(int i = 0; i < max; i++){
30                 KGram<T> kgram = new KGram<T>(kvalue);
31                 for(int j = 0; j < kvalue; j++){
32                     kgram.set(j, values[i + j]);
33                 }
34                 kgrams.add(kgram);
35             }
36         }
37         return kgrams.toArray(new KGram[kgrams.size()]);
38     }
39
40     @SuppressWarnings("unchecked")
41     public <T> KGram<T>[] buildKGram(List<T> values, int kvalue){
42         Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
43
44         if(values.size() >= kvalue){
45             int max = values.size() - (kvalue - 1);
46             for(int i = 0; i < max; i++){
47                 KGram<T> kgram = new KGram<T>(kvalue);
48                 for(int j = 0; j < kvalue; j++){
49                     kgram.set(j, values.get(i + j));
50                 }
51                 kgrams.add(kgram);
52             }
53         }
54         return kgrams.toArray(new KGram[kgrams.size()]);
55     }
56 }