RMS遍历类RecordFilter和RecordComparator用法

RMS 提供的遍历类RecordEnumeration,构造函数原型如下:Public RecordEnumeration enumerateRecords (RecordFilter filter, RecordComparator comparator, boolean keepUpdated) 

第一个参数是RecordFilter,它就是用来筛选数据库中的纪录的,筛选的条件就是我们需要定义的方法,boolean matches(byte[] data),如果不指定就不筛选。 

第二个参数是RecordComparator,它是对选择出来的数据进行排序的,如果你不指定的话就按照默认的顺序排序。 

第三个参数是boolean类型的,如果是true的话,那么record会跟踪rms中的数据变化,这是比较昂贵的开销,我一般都是用false的。 

一般来说,用最简单的即可:RecordEnumeration enumerateRecords(null, null, false);RMS中遍历RecordEnumeration经常用到,其中接口RecordFilter经常用,RecordComparator也会用到,但不多,现分别小结如下: 

一、接口RecordFilter的使用 

在 enumerateRecords 方法中,fifter为过滤参数,需要自己定义一个继承RecordFilter接口的过滤类,在类里面定义需要过滤的条件。RecordFilter接口只有一个需要实现的接口函数,函数原型如下:public boolean matches (byte[] candidate) 

实现一个 RecordFilter 接口的过滤类的基本结构如下: 

Java代码 复制代码
  1. public class MyFilter implements RecordFilter {    
  2. public boolean matches(byte[] rec) {}    
  3. }   
public class MyFilter implements RecordFilter { 
public boolean matches(byte[] rec) {} 
} 
 
例:创建一个查找匹配字符“Hello”记录的MyFilter类的具体代码如下: 

Java代码 复制代码
  1. public class MyFilter implements RecordFilter    
  2. {    
  3. public boolean matches(byte[] rec)    
  4. {    
  5. String str = new String(rec);    
  6. if(str.equals("Hello") )    
  7. {    
  8. return true;    
  9. }else{    
  10. return false;    
  11. }    
  12. }    
  13. }   
public class MyFilter implements RecordFilter 
{ 
public boolean matches(byte[] rec) 
{ 
String str = new String(rec); 
if(str.equals("Hello") ) 
{ 
return true; 
}else{ 
return false; 
} 
} 
} 
 
具体使用MyFilter类的代码如下: 
Java代码 复制代码
  1. RecordStore rs;    
  2. RecordFilter rf = new MyFilter();    
  3. //创建rs对象的代码略    
  4. RecordEnumeration re = null;    
  5. try {    
  6. re = rs.enumetateRecords(rf, nullfalse); //过滤条件是rf    
  7. if (re.hasNextElement()){    
  8. recordID = re.nextRecordId();    
  9. }    
  10. }catch(Exception e) {    
  11. }  
RecordStore rs; 
RecordFilter rf = new MyFilter(); 
//创建rs对象的代码略 
RecordEnumeration re = null; 
try { 
re = rs.enumetateRecords(rf, null, false); //过滤条件是rf 
if (re.hasNextElement()){ 
recordID = re.nextRecordId(); 
} 
}catch(Exception e) { 
}
 


二、排序接口RecordComparator也会用到,虽然不多,也做一小结吧: 

排序RecordComparator接口也有一个需要实现的接口函数,原型如下:public int compare (byte[] rec1, byte[] rec2) 

rec1, rec2 分别指需要比较的两条记录的二进制数据,比较的结果返回一个int型数值,数值有三种可能:RecordComparator.PRECEDES : rec1在rec2之前RecordComparator.FOLLOWS : rec1在rec2之后RrcordComparator.EQUIVALENT : 位置相等 

实现一个RecordComparator接口的比较类基本结构如下: 

Java代码 复制代码
  1. public class MyComparator implements RecordComparator {    
  2. public int compare(byte[] rec1, byte[] rec2) {}    
  3. }   
public class MyComparator implements RecordComparator { 
public int compare(byte[] rec1, byte[] rec2) {} 
} 
 
例:一个2条记录字符串从小到大排序比较的代码如下: 

Java代码 复制代码
  1. public class MyComparator implements RecordComparator {    
  2.   
  3. public int compare(byte[] rec1, byte[] rec2)    
  4. {    
  5. String str1 = new String(rec1);    
  6. String str2 = new String(rec2);    
  7. int result = str1.compareTo(str2);    
  8.   
  9. if (result == 0) {    
  10. return RecordComparator.EQUIVALENT;    
  11. else if (result < 0) {    
  12. return RecordComparator.PRECEDES;    
  13. else {    
  14. return RecordComparator.FOLLOWS;    
  15. }    
  16. }    
  17. }   
public class MyComparator implements RecordComparator { 

public int compare(byte[] rec1, byte[] rec2) 
{ 
String str1 = new String(rec1); 
String str2 = new String(rec2); 
int result = str1.compareTo(str2); 

if (result == 0) { 
return RecordComparator.EQUIVALENT; 
} else if (result < 0) { 
return RecordComparator.PRECEDES; 
} else { 
return RecordComparator.FOLLOWS; 
} 
} 
} 
 
具体使用MyComparator类的代码如下: 
Java代码 复制代码
  1. RecordStore rs;    
  2. RecordComparator rc = new RecordComparator ();    
  3. //创建rs对象的代码略    
  4. RecordEnumeration re = null;    
  5.   
  6. try {    
  7. re = rs.enumerateRecords(null, rc, false);    
  8. if (re.hasNextElement()) {    
  9. recordID = re.nextRecordId();    
  10. }    
  11. }catch (Exception e) {}   
RecordStore rs; 
RecordComparator rc = new RecordComparator (); 
//创建rs对象的代码略 
RecordEnumeration re = null; 

try { 
re = rs.enumerateRecords(null, rc, false); 
if (re.hasNextElement()) { 
recordID = re.nextRecordId(); 
} 
}catch (Exception e) {} 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值