关于数据库范式理论的程序设计 - SequenceUtils
这里我使用的工具类全部都是使用接口,public interface SequenceUtils是本程序中所有算法的基类。就是后面的算法都会用到该接口中的默认实现方法,继承关系如下:
SequenceUtils的default方法
里面都是一些关于后面算法会用到的字符序列的方法,里面的方法的参数基本都是用CharSequence接口声明,CharSequence的实现类主要有String,StringBuffer,StringBuilder。所有方法都是便于组合使用。
isEmpty(),deDuplicate(),sort()方法
1. 方法代码
/**
* 描述:字符序列是否为空
* @param sequence String
* @return boolean
*/
default boolean isEmpty(CharSequence sequence) {
return sequence == null || "".equals(sequence.toString());
}
/**
* 描述:对字符序列进行排序
* ABC = sort(CAB);
* @param sequence 字符串
* @return 排序(升序)的String
*/
default CharSequence sort(CharSequence sequence) {
final char[] array = sequence.toString().toCharArray();
Arrays.sort(array);
return String.valueOf(array);
}
/**
* 描述:消除字符序列的重复字符,保留第一次出现的子串
* @param sequence CharSequence
* @return 去重后的String
*/
default CharSequence deDuplicate(CharSequence sequence) {
final StringBuffer sb = new StringBuffer();
final Set<Character> set = new HashSet<>();
for (int i = 0; i < sequence.length(); i++) {
final char c = sequence.charAt(i);
if (set.add(c)) {
sb.append(c);
}
}
return sb;
}
/**
* 描述:Collection<Character>转换为字符序列
* @param characters Character
* @return CharSequence
*/
default CharSequence collectionToSequence(Collection<Character> characters) {
final StringBuffer buffer = new StringBuffer();
characters.forEach(buffer::append);
return buffer;
}
2. 测试代码(Junit)
import com.ruoxing.dbs.util.SequenceUtils;
import org.junit.Test;
import java.util.*;
/**
* 描述:对SequenceUtils的测试
*/
public class Test1