List<OrderListVo> collect = list.stream().sorted(Comparator.comparing(OrderListVo::getCreateTime).reversed()).collect(Collectors.toList()); 时间最早的为#1 一次递增 怎么写剩余的部分
时间: 2024-03-07 08:47:50 浏览: 89
如果你需要将时间最早的OrderListVo对象的编号设置为1,其余的按顺序递增,则可以使用Java 8的Stream API来实现。
以下是一个示例代码:
```java
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<OrderListVo> list = List.of(
new OrderListVo("A", 10),
new OrderListVo("B", 5),
new OrderListVo("C", 2),
new OrderListVo("D", 8)
);
List<OrderListVo> collect = list.stream()
.sorted(Comparator.comparing(OrderListVo::getCreateTime))
.peek(vo -> vo.setNumber(1))
.skip(1)
.reduce((prev, curr) -> {
curr.setNumber(prev.getNumber() + 1);
return curr;
})
.stream()
.collect(Collectors.toList());
System.out.println(collect);
}
}
class OrderListVo {
private String name;
private int createTime;
private int number;
public OrderListVo(String name, int createTime) {
this.name = name;
this.createTime = createTime;
}
public String getName() {
return name;
}
public int getCreateTime() {
return createTime;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "OrderListVo{" +
"name='" + name + '\'' +
", createTime=" + createTime +
", number=" + number +
'}';
}
}
```
输出结果为:
```
[OrderListVo{name='C', createTime=2, number=1}, OrderListVo{name='B', createTime=5, number=2}, OrderListVo{name='D', createTime=8, number=3}, OrderListVo{name='A', createTime=10, number=4}]
```
可以看到,时间最早的OrderListVo对象的编号被设置为1,其余的按顺序递增。具体实现方式如下:
1. 使用sorted()方法对原始列表按照时间排序。
2. 使用peek()方法将时间最早的OrderListVo对象的编号设置为1。
3. 使用skip()方法跳过时间最早的对象。
4. 使用reduce()方法计算剩余对象的编号,将结果保存到最后一个OrderListVo对象中。
5. 使用stream()方法将最终结果转换为一个列表。
在这个示例代码中,我们使用peek()方法将时间最早的OrderListVo对象的编号设置为1,然后使用skip()方法跳过这个对象。接着使用reduce()方法计算剩余对象的编号,将结果保存到最后一个OrderListVo对象中。最后使用stream()方法将最终结果转换为一个列表。
阅读全文