时间适配
在Excel中编辑时间会导致时间格式不统一,因此可以进行适配解析
/**
* 适配Excel的时间
*/
private static void testDateTranfer() {
String[] dateStrings = {"2022/2/12", "2022/02/2", "2022/12/12", "2022/12/01"};
// 定义日期格式解析器
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy/")
.optionalStart()
.appendValue(ChronoField.MONTH_OF_YEAR, 1, 2, SignStyle.NEVER)
.optionalEnd()
.appendPattern("/")
.appendValue(ChronoField.DAY_OF_MONTH, 1, 2, SignStyle.NEVER)
.toFormatter();
// 解析日期字符串并输出结果
for (String dateString : dateStrings) {
LocalDate date = LocalDate.parse(dateString, formatter);
System.out.println("解析后的日期: " + date);
}
}
编号重复的情况下,怎么从List中根据编号进行分组,并且只获取其中修改时间最晚的那个数据
public class GroupAndFilter {
public static void main(String[] args) {
// 假设有一个List包含了一些数据
List<Data> dataList = new ArrayList<>();
dataList.add(new Data(1, LocalDateTime.of(2023, 8, 1, 10, 0, 0)));
dataList.add(new Data(2, LocalDateTime.of(2023, 8, 1, 9, 0, 0)));
dataList.add(new Data(1, LocalDateTime.of(2023, 8, 2, 11, 0, 0)));
dataList.add(new Data(3, LocalDateTime.of(2023, 8, 2, 10, 0, 0)));
dataList.add(new Data(3, LocalDateTime.of(2023, 8, 3, 8, 0, 0)));
// 根据编号进行分组,并获取每组中修改时间最晚的数据
Map<Integer, Data> latestDataByNumber = dataList.stream()
.collect(Collectors.groupingBy(Data::getNumber,
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(Data::getModifiedTime)),
Optional::get)));
//或者
Map<Integer, Data> latestDataByNumber3 = dataList.stream()
.collect(Collectors.toMap(Data::getNumber, Function.identity(), BinaryOperator.maxBy(Comparator.comparing(Data::getModifiedTime))));
Map<Integer, Data> latestDataByNumber1 = dataList.stream().collect(Collectors.toMap(Data::getNumber,
Function.identity(), (key1, key2) -> key1.getModifiedTime().compareTo(key2.getModifiedTime()) > 0 ? key1 : key2));
// 输出结果
latestDataByNumber.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));
latestDataByNumber1.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));
latestDataByNumber3.forEach((number, data) -> System.out.println("Number: " + number + ", Latest Data: " + data.getModifiedTime()));
}
static class Data {
private int number;
private LocalDateTime modifiedTime;
public Data(int number, LocalDateTime modifiedTime) {
this.number = number;
this.modifiedTime = modifiedTime;
}
public int getNumber() {
return number;
}
public LocalDateTime getModifiedTime() {
return modifiedTime;
}
}
}