Saya memiliki peta hash dengan nilai-nilai di bawah ini, dalam nilai yang saya kencani sebagai tipe data string. Saya ingin membandingkan semua tanggal yang tersedia di peta dan mengekstrak hanya satu nilai kunci yang memiliki tanggal yang sangat baru.
Saya ingin membandingkan dengan nilai bukan kunci.
Saya sudah memasukkan kode di bawah ini
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "1999-01-01");
map.put("2", "2013-10-11");
map.put("3", "2011-02-20");
map.put("4", "2014-09-09");
map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v));
}
}
Output yang diharapkan untuk yang satu ini adalah:
Nilai 4 Kunci 2014-09-09
LocalDate
benda. Sisa kode mungkin akan sama, simpan pernyataan jenis peta.Jawaban:
Ini harus memberikan tanggal terbaru (alias terbesar) dibandingkan dengan yang lain.
Jika Anda juga menginginkan kunci, lakukan ini dan kembalikan Peta. Coba. Membutuhkan Java 9+
Ini menganggap peta Anda tidak kosong. jika kosong, maka mengembalikan nol. Bekerja dengan Java 8+
sumber
Gunakan Collections.max dengan entrySet
atau
sumber
Map.Entry.comparingByValue()
bagus (sejak Java 8).Pada pandangan pertama, menggunakan String literals untuk mewakili Date bukanlah pendekatan yang baik dan membuatnya lebih rapuh dan rentan kesalahan. Anda lebih suka menggunakannya
LocalDate
di tempat pertama. Namun, dengan asumsi bahwa Anda tidak memiliki kendali atas format data tersebut (misalnya, itu berasal dari sistem pihak ketiga lain), kami masih dapat menyusun suatu pendekatan yang menyelesaikan masalah yang ada. Begini tampilannya.Ini
LocalDate.parse
digunakan untuk mengubah representasi string dari tanggal menjadi suatuLocalDate
yang Sebanding. ItuComparable
kemudian disahkan sebagai kunciComparator
metode konstruksi. Dan inilah pasangan nilai kunci output pada eksekusi yang sukses:Jika Anda hanya dapat membuang representasi String dari tanggal seperti yang disarankan di atas, maka Anda dapat membuat solusi di atas jauh lebih sederhana dan ringkas.
sumber
Ini seharusnya bekerja
output adalah
Optional[4=2014-09-09]
sumber
Anda dapat menguraikan string ke dalam
LocalDate
dan mengurutkannya dalam urutan terbaliksumber
Anda dapat melakukannya:
atau :
Keduanya akan menghasilkan hasil yang sama.
sumber
Map.Entry.comparingByValue()
bagus (sejak Java 8).