Ich muss folgenden Code:Java-Streams: Gruppieren und Sortieren nach einem vorherigen Mapping-Ergebnis?
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);
}
}
}
Dies erzeugt eine solche Liste:
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
....
Statt der for-Schleife und vertrauter mit Strom API zu bekommen, habe ich versucht, dies zu einem Strom neu zu schreiben Ergebnis, wobei das Ergebnis nach dem Offset sortiert werden soll. Das Ergebnis sollte wie folgt aussehen:
-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
konnte ich die Offsets (unsortiert) mit dem Ausdruck unten drucken, aber wie sie auf dem zoneIds bewerben? Ich muss mich irgendwie an das vorherige zoneId Mapping-Ergebnis erinnern.
allZones.stream()
.map(s -> ZoneId.of(s))
.map(zId -> localDateTime.atZone(zId).getOffset())
.forEach(System.out::println);
Wenn Sie '.sorted()' direkt vor '.forEach()' einfügen, wird das Programm das tun, was Sie wollen? Ich bin mir nicht sicher, ob ich die Erwartungen hier verstehe. –
@PiotrFindeisen Dies wird in aufsteigender Reihenfolge sortiert, aber dies löst nicht das Problem, wie sie zusammen mit den zoneIds zugeordnet werden. – Bevor
Nur um klar zu sein, du stellst zwei Fragen, richtig? – shmosel