📜  Java中的流排序(比较器比较器)方法(1)

📅  最后修改于: 2023-12-03 15:16:33.874000             🧑  作者: Mango

Java中的流排序(比较器Comparator)方法

在Java中,我们经常需要对集合中的元素进行排序。Java提供了两种方式来进行排序:通过实现Comparable接口或使用Comparator比较器。

下面介绍在Java中使用Comparator比较器进行排序的方法。

1. Comparator接口

Comparator是Java用来进行两个对象比较的接口。一个Comparator对象可以对多个对象进行比较,它定义了两个抽象方法:

int compare(T o1, T o2);
boolean equals(Object obj);

其中compare方法比较两个对象的大小,返回一个整数值。如果o1小于o2,则返回一个负数;如果o1等于o2,则返回0;如果o1大于o2,则返回一个正数。

以下是一个简单的Comparator实现,用来比较两个String对象的长度:

Comparator<String> lengthCompare = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
};
2. 流排序方法

Java 8中的Stream提供了一个sorted方法,用于将元素进行排序。我们可以通过传递一个Comparator对象来指定元素的排序方式。

以下是一个使用Stream排序的例子:

List<String> names = Arrays.asList("John", "Alex", "Peter", "Tina", "Jane");

// 按字母顺序排序
List<String> sortedNames = names.stream()
    .sorted()
    .collect(Collectors.toList());

//按名字长度排序
List<String> sortedNamesByLength = names.stream()
    .sorted(lengthCompare)
    .collect(Collectors.toList());
3. 降序排序

默认情况下,sorted方法产生的排序结果是升序的。如果需要降序排列,可以使用Comparator接口的reversed方法。

以下是一个按照字符串长度降序排列的例子:

List<String> sortedNamesByLengthReverse = names.stream()
    .sorted(lengthCompare.reversed())
    .collect(Collectors.toList());
4. 结论

通过使用Comparator比较器,我们可以对集合中的元素进行排序,并在流操作中使用。这种方式非常灵活,允许我们指定任何我们希望的排序方式。

代码片段:

Comparator<String> lengthCompare = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o1.length() - o2.length();
    }
};

List<String> names = Arrays.asList("John", "Alex", "Peter", "Tina", "Jane");

// 按字母顺序排序
List<String> sortedNames = names.stream()
    .sorted()
    .collect(Collectors.toList());

//按名字长度排序
List<String> sortedNamesByLength = names.stream()
    .sorted(lengthCompare)
    .collect(Collectors.toList());

//按名字长度降序排序
List<String> sortedNamesByLengthReverse = names.stream()
    .sorted(lengthCompare.reversed())
    .collect(Collectors.toList());