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中过滤器
- list(FileNameFilter fnf):根据文件名称过滤器,过滤对象名称
- listFiles(FileNameFilter fnf):根据文件名称过滤器,过滤对象
- listFiles(FileFilter ff):根据文件过滤器,过滤文件
- 过滤器接口中,有一个过滤的方法,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());
}
}
}