stream流对日期集合排序
时间: 2024-07-04 16:01:09 浏览: 179
Stream 流在 Java 中提供了一种高效的方式来处理集合中的元素,包括对日期集合进行排序。如果你想按照日期对集合进行排序,你可以使用 `sorted()` 函数结合一个自定义的比较器或日期格式化器。
例如,如果你有一个 `List<Date>` 类型的日期集合,你可以这样做:
```java
List<Date> dates = ...; // 你的日期集合
Collections.sort(dates, Comparator.comparing(Date::getTime)); // 以时间戳排序
```
如果你想根据 `LocalDate` 或 `LocalDateTime` 对日期进行排序,可以这样:
```java
List<LocalDate> localDates = ...;
dates.sort(Comparator.comparing(LocalDate::isAfter)); // 递增排序
List<LocalDateTime> localDateTimeList = ...;
localDateTimeList.sort(Comparator.comparing(LocalDateTime::compareTo)); // 递增排序
```
如果你想要降序排序,只需要将 `Comparator.comparing()` 方法中的 `isAfter` 或 `compareTo` 改为 `comparingDesc()` 或 `reversed()`。
相关问题
java中stream流对String类型日期集合做升序排序
假设有一个String类型的日期集合,可以使用Java 8中的Stream流对其进行升序排序,具体代码如下:
```java
List<String> dateList = Arrays.asList("2022-10-01", "2022-10-02", "2022-09-30", "2022-10-03");
List<String> sortedDateList = dateList.stream()
.sorted(Comparator.comparing(s -> LocalDate.parse(s)))
.collect(Collectors.toList());
System.out.println(sortedDateList);
```
代码解释:
1. 首先,将字符串日期集合转换为Stream流。
2. 使用sorted()方法对流中的元素进行排序,Comparator.comparing()方法用于比较元素的大小。
3. 在Comparator.comparing()方法中,使用LocalDate.parse()方法将字符串日期转换为LocalDate类型,然后比较大小。
4. 最后,使用collect()方法将排序后的结果转换为List集合。
输出结果:
```
[2022-09-30, 2022-10-01, 2022-10-02, 2022-10-03]
```
可以看到,String类型的日期集合已经按照升序排序。
java8 使用stream流对对象集合按对象创建时间倒序排序
要使用Java 8的`Stream`流对对象集合按对象创建时间倒序排序,你可以使用`Comparator`和`sorted`方法。假设你有一个包含对象的集合,每个对象都有一个表示创建时间的属性。以下是一个示例:
假设你有一个名为`Person`的类,其中包含一个名为`creationTime`的`Date`属性,用于表示对象的创建时间。你可以使用以下代码对`Person`对象集合进行按照创建时间倒序排序:
```java
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
public class PersonSorting {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("John", new Date(2022, 0, 1)));
persons.add(new Person("Alice", new Date(2021, 4, 15)));
persons.add(new Person("Bob", new Date(2021, 8, 30)));
List<Person> sortedPersons = persons.stream()
.sorted(Comparator.comparing(Person::getCreationTime).reversed())
.collect(Collectors.toList());
System.out.println("排序前的集合:" + persons);
System.out.println("排序后的集合:" + sortedPersons);
}
}
class Person {
private String name;
private Date creationTime;
public Person(String name, Date creationTime) {
this.name = name;
this.creationTime = creationTime;
}
public Date getCreationTime() {
return creationTime;
}
@Override
public String toString() {
return name;
}
}
```
在上面的例子中,首先创建了一个`Person`类,其中包含了`name`和`creationTime`属性。然后创建了一个`persons`集合,并添加了一些`Person`对象。
使用`stream()`方法将集合转换为流,然后使用`sorted()`方法并传递一个按照`creationTime`属性排序的比较器。在这个例子中,我们使用了`Comparator.comparing()`方法和方法引用(`Person::getCreationTime`)来指定按照`creationTime`属性进行比较。通过调用`.reversed()`方法,我们可以实现倒序排序。
最后,使用`collect(Collectors.toList())`方法将排序后的元素收集到一个新的列表中。
在控制台上,你将看到排序前和排序后的集合输出结果。注意,这里使用了Java 8的日期类库,但请注意Java中的年份是从1900开始计数的,所以需要对年份进行适当的调整。
阅读全文
相关推荐














