前言

简单整理一下List的集合的排序,简单的记录一下,方便自己后续查阅。

正文

这里介绍一下使用ComparableComparator进行排序

Comparable

在实现的FileInfo实现Comparable,然后实现排序compareTo()即可。具体如下

public class FileInfo implements Comparable<FileInfo> {
    private String mPath = null;
    private String mName = null;
    private String mDate = null;

    public String getPath() {
        return mPath;
    }

    public void setPath(String path) {
        mPath = path;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getDate() {
        return mDate;
    }

    public void setDate(String date) {
        mDate = date;
    }
    
    @Override
    public int compareTo(FileInfo o) {
        return Collator.getInstance(Locale.ROOT).compare(getName(), o.getName());
    }
}

注意,我这里是以字母排序A-Z顺序排序。

如果要使用其他的比较方法,只需要改变compareTo()中的比较即可。

还可以比较文件大小。

@Override
public int compareTo(FileInfo o) {
    return (int) (getSize()-o.getSize());
}

通实现Comparable接口,就可以使用下面方法进行排序。

List<FileInfo> listFile = new ArrayList<>();

//添加数据
listFile.add(...);

//排序
Collections.sort(listFile);

Comparator

这种方式FileInfo不需要实现其他接口,如下。

public class FileInfo {
    private String mPath = null;
    private String mName = null;
    private String mDate = null;

    public String getPath() {
        return mPath;
    }

    public void setPath(String path) {
        mPath = path;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getDate() {
        return mDate;
    }

    public void setDate(String date) {
        mDate = date;
    }
}

这里可以分三种方式单独记录。

方式1
listFile.sort(new Comparator<FileInfo>() {
    @Override
    public int compare(FileInfo o1, FileInfo o2) {
        return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName());
    }
});
方式2
Collections.sort(listFile, new Comparator<FileInfo>() {
    @Override
    public int compare(FileInfo o1, FileInfo o2) {
        return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName());
    }
});
方式3

JDK 8之后还可以使用

listFile= listFile.stream().sorted(new Comparator<FileInfo>() {
    @Override
    public int compare(FileInfo o1, FileInfo o2) {
        return Collator.getInstance(Locale.ROOT).compare(o1.getName(), o2.getName());
    }
}).collect(Collectors.toList());

参考文章

  1. Java中List排序的3种方法

相关文章

暂无评论

none
暂无评论...