1 package jp.sourceforge.stigmata.birthmarks.kgram;
3 import java.util.LinkedHashSet;
8 * @author Haruaki Tamada
10 public class KGramBuilder{
11 private static final KGramBuilder builder = new KGramBuilder();
14 * private constructor for singleton pattern.
16 private KGramBuilder(){
19 public static KGramBuilder getInstance(){
23 @SuppressWarnings("unchecked")
24 public <T> KGram<T>[] buildKGram(T[] values, int kvalue){
25 Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
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]);
37 return kgrams.toArray(new KGram[kgrams.size()]);
40 @SuppressWarnings("unchecked")
41 public <T> KGram<T>[] buildKGram(List<T> values, int kvalue){
42 Set<KGram<T>> kgrams = new LinkedHashSet<KGram<T>>();
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));
54 return kgrams.toArray(new KGram[kgrams.size()]);