JavaSE中过滤器比较

1、集合中过滤器

HashSet和TreeSet中,要实现排列可以有以下方法

1、实现Comperable接口

这种方法适用于实现接口的类的属性本身具备可以进行比较,例如Person类的age属性。具体在实现Comparable接口后,再重写comparTo( )方法。comparTo( )方法的调用者是即将存储到集合中的元素,参数为已经存在的元素;调用者 > 参数对象,返回正数,调用者放在排序Set的后面,即升序排列。

public class Person implements Comparable<Person> {
	private int age;

	@Override
	// 以年龄进行排序
	public int compareTo(Person o) {// 调用者是即将存储到集合中的元素,参数是已经存储到集合的元素
		// 返回值为0,认为两个元素相等
		// 返回值大于0,认为新元素大于旧元素
		// 返回值小于0,认为新元素小于旧元素
		int num = this.age - o.age;// 调用者年龄减去参数年龄
		return num == 0 ? 1 : num;// 如果num==0,返回1,把新的元素放在后面;如果不为0,按照正常排序
	}
}

2、实现Comperator接口

这种方法适用于实现接口的类的属性本身不具备进行比较的功能,例如比较字符串的长度。具体为定义一个类,它实现Comparator接口,重写Comparator接口中的compar(o1,o2)方法。compar( )方法的o1是即将存储到集合中的元素,o2为已经存在的元素;o1 > o1,返回正数,o1放在排序Set的后面,即升序排列。

public class Demo_Comparator {
	public static void main(String[] args) {
		TreeSet<String> ts = new TreeSet<>(new MyComparator());
		ts.add("yr");
		ts.add("reyxcv");
		ts.add("sdfr");
		ts.add("zvcfd");
		ts.add("bvz");
		System.out.println(ts);
	}
}

class MyComparator implements Comparator<String> {
	// 可以比较两个元素的大小,Comparable只是使对象具有比较功能
	@Override
	public int compare(String o1, String o2) {
		return o1.length() - o2.length();
	}
}

2、File中过滤器

  1. list(FileNameFilter fnf):根据文件名称过滤器,过滤对象名称
  2. listFiles(FileNameFilter fnf):根据文件名称过滤器,过滤对象
  3. listFiles(FileFilter ff):根据文件过滤器,过滤文件
  4. 过滤器接口中,有一个过滤的方法,accept,判断某个文件是否符合条件
public class Demo_FilenameFilter {
	public static void main(String[] args) {
		File f = new File("E:/imgs");
		File[] listFiles = f.listFiles(new FilenameFilterDemo());// 创建过滤器对象
		for (File file : listFiles) {// 对还过滤器中还存在的file遍历
			System.out.println(file.getName() + "," + file.length());
		}
	}
}

class FilenameFilterDemo implements FilenameFilter {

	@Override
	public boolean accept(File dir, String name) {// dir是一个目录,name是文件的名称
		// 写文件的判断条件,只有返回true才能保留
		return dir.isDirectory() && name.endsWith(".jpg");
	}
}
public class Demo_FileFilter {
	public static void main(String[] args) {
		File f = new File("E:/imgs");
		File[] listFiles = f.listFiles(new FileFilter() {

			@Override
			public boolean accept(File pathname) {// pathname是路径名,可以是文件也可以是文件夹
				return pathname.isFile() && pathname.getName().endsWith(".jpg");
			}
		});
		for (File file : listFiles) {
			System.out.println(file.getName() + "," + file.length());
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值