gpt4 book ai didi

Java流: group and sort by a previous mapping result?

转载 作者:行者123 更新时间:2023-12-02 18:18:42 25 4
gpt4 key购买 nike

我必须遵循以下代码:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class TimeZonesExample
{
public static void main(String[] args)
{
Set<String> allZones = ZoneId.getAvailableZoneIds();
LocalDateTime localDateTime = LocalDateTime.now();

List<String> zoneList = new ArrayList<>(allZones);

for (String s : zoneList)
{
ZoneId zoneId = ZoneId.of(s);
ZonedDateTime zoneDateTime = localDateTime.atZone(zoneId);
ZoneOffset zoneOffset = zoneDateTime.getOffset();
String out = String.format("%35s %10s%n", zoneId, zoneOffset);

System.out.printf(out);
}
}
}

这会产生这样一个列表:

                  Asia/Aden     +03:00
America/Cuiaba -03:00
Etc/GMT+9 -09:00
Etc/GMT+8 -08:00
Africa/Nairobi +03:00
America/Marigot -04:00
Asia/Aqtau +05:00
Pacific/Kwajalein +12:00
America/El_Salvador -06:00
Asia/Pontianak +07:00
Africa/Cairo +02:00
Pacific/Pago_Pago -11:00
Africa/Mbabane +02:00
Asia/Kuching +08:00
....

为了更熟悉流 API,我尝试将其重写为流结果,而不是 for 循环,结果应按偏移量排序。结果应该如下所示:

-09:00 Etc/GMT+9   
-08:00 Etc/GMT+8
-04:00 America/Marigot
-03:00 America/Cuiaba
+03:00 Africa/Nairobi
+03:00 Asia/Aden

我能够使用下面的表达式打印偏移量(未排序),但是如何将它们应用到 zoneId 上?我必须记住之前的 zoneId 映射结果。

allZones.stream()
.map(s -> ZoneId.of(s))
.map(zId -> localDateTime.atZone(zId).getOffset())
.forEach(System.out::println);

最佳答案

您可以从 ZonedDateTime.getZone() 获取 ZoneId。试试这个:

ZoneId.getAvailableZoneIds()
.stream()
.map(ZoneId::of)
.map(ZonedDateTime::now)
.sorted(Comparator.comparing(ZonedDateTime::getOffset).reversed())
.forEach(zdt -> System.out.println(zdt.getOffset() + "\t" + zdt.getZone()));

关于Java流: group and sort by a previous mapping result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41472625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com