hbase2.1.x Comparator比较器

说明

HBase 的一些过滤器使用了 比较器,用于比较值,如:大于值,前缀符合某个要求

所有的比较器实现类都继承于父类 ByteArrayComparable,而 ByteArrayComparable 又实现了 Comparable 比较接口

不同功能的比较器差别在于:对 Comparable 接口中 compareTo() 方法的实现不同

BinaryComparator

二进制 比较器,用于按字典顺序比较指定字节数组,如果是字符串,比较的是 ascii 码

例子

BinaryComparator bc = new BinaryComparator(Bytes.toBytes("bbb"));

int code1 = bc.compareTo(Bytes.toBytes("bbb"));
System.out.println(code1); // 0,表示相同
int code2 = bc.compareTo(Bytes.toBytes("aaa"));
System.out.println(code2); // 1,表示 当前值 bbb 的字节大于形参 aaa
int code3 = bc.compareTo(Bytes.toBytes("ccc"));
System.out.println(code3); // -1,表示 当前值 bbb 的字节小于形参 aaa
int code4 = bc.compareTo(Bytes.toBytes("bbbaaedf"));
System.out.println(code4); // -5,两个字符串不一样长,则返回两个字符串的长度差值

比较规则:

  • 两个字符串首字母不同,则该方法返回首字母的asc码的差值

  • 两个字符串如果 首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值

  • 两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值

BinaryPrefixComparator

二进制比较器,比较前缀是否相同,如果是字符串,比较的是 ascii 码

例子

BinaryPrefixComparator bc = new BinaryPrefixComparator(Bytes.toBytes("cb"));

int code1 = bc.compareTo(Bytes.toBytes("cbf"));
System.out.println(code1); // 0,当前值 cb 与 形参 cbf 的前缀相同
int code2 = bc.compareTo(Bytes.toBytes("aaa"));
System.out.println(code2); // 2,当前值 cb 与 形参 aaa 的前缀不同
int code3 = bc.compareTo(Bytes.toBytes("ecc"));
System.out.println(code3); // -2,当前值 cb 与 形参 aaa 的前缀不同

SubstringComparator

判断 SubstringComparator 对象中的字符串,是否出现在 字符串 value 中,并且不区分大小写。

返回值:

  • 包含字串返回0
  • 不包含返回1

例子

String value = "HADOOP从入门到精通";

SubstringComparator sc = new SubstringComparator("P从入门");
int i = sc.compareTo(Bytes.toBytes(value));
System.out.println(i); // 0 ,字符串 "P从入门" 在 "HADOOP从入门到精通" 中

SubstringComparator sc2 = new SubstringComparator("ooP");
int i2 = sc2.compareTo(Bytes.toBytes(value));
System.out.println(i2); // 0,字符串 "ooP" 在 "HADOOP从入门到精通" 中(不区分大小写)

SubstringComparator sc3 = new SubstringComparator("abd");
int i3 = sc3.compareTo(Bytes.toBytes(value));
System.out.println(i3); // 1,字符串 "abd" 不在 "HADOOP从入门到精通" 中

RegexStringComparator

支持正则表达式的值比较,匹配成功返回0,匹配失败返回1。

例子

String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
RegexStringComparator rsc2 = new RegexStringComparator(check);
int code = rsc2.compareTo(Bytes.toBytes("zpb@163.com"));
System.out.println(code); // 0,匹配正则表达式
int code2 = rsc2.compareTo(Bytes.toBytes("zpb#163.com"));
System.out.println(code2); // 1,不匹配正则表达式

NullComparatorDemo

判断当前值是不是为null。是null返回0,不是null返回1

例子

NullComparator nc = new NullComparator();
int i1 = nc.compareTo(Bytes.toBytes("abc"));
int i2 = nc.compareTo(Bytes.toBytes(""));
int i3 = nc.compareTo(null);
System.out.println(i1); // 1
System.out.println(i2); // 1
System.out.println(i3); // 0

LongComparator

BigDecimalComparator

BitComparator

参考:
https://developer.aliyun.com/article/800329


原文出处:http://malaoshi.top/show_1IX4pKTY0Wen.html