Saya memiliki Map<String,List<String>>
dan ingin mengubahnya menjadi Map<String,List<Long>>
karena masing-masing String
dalam daftar mewakili Long
:
Map<String,List<String>> input = ...;
Map<String,List<Long>> output=
input.entrySet()
.stream()
.collect(toMap(Entry::getKey, e -> e.getValue().stream()
.map(Long::valueOf)
.collect(toList()))
);
Masalah utama saya adalah masing String
- masing mungkin tidak mewakili dengan benar a Long
; mungkin ada beberapa masalah. Long::valueOf
dapat meningkatkan pengecualian. Jika ini masalahnya, saya ingin mengembalikan nol atau kosongMap<String,List<Long>>
Karena saya ingin mengulang setelah output
peta ini . Tetapi saya tidak dapat menerima konversi kesalahan apa pun; bahkan tidak satu pun. Adakah gagasan tentang bagaimana saya dapat mengembalikan output kosong jika String salah -> Konversi panjang?
java
java-8
java-stream
AntonBoarf
sumber
sumber
LongStream
jika Anda berencana untuk menghapusempty
hasil)Jawaban:
Bagaimana dengan eksplisit
catch
atas pengecualian:sumber
nfe.getMessage()
input.entrySet().stream() .filter(e -> e.getValue().stream().anyMatch(s -> !new Scanner(s).hasNextLong())) .map(Map.Entry::getKey) .findAny()
Saya pribadi suka memberikan
Optional
input seputar penguraian angka:Lalu, gunakan kode Anda sendiri (dan abaikan input buruk):
Selain itu, pertimbangkan metode pembantu untuk membuat ini lebih ringkas:
Kemudian Anda dapat memfilter hasil di kolektor aliran Anda:
Anda juga bisa menyimpan
Optional
objek kosong di daftar Anda, dan kemudian dengan membandingkan indeks mereka di yang baruList<Optional<Long>>
(bukanList<Long>
) dengan yang asliList<String>
, Anda dapat menemukan string yang menyebabkan input yang salah. Anda juga bisa dengan mudah mencatat kegagalan iniMyClass#parseLong
Namun, jika keinginan Anda adalah untuk tidak beroperasi pada setiap masukan buruk sama sekali, maka mengelilingi seluruh aliran dalam apa yang Anda mencoba untuk menangkap (per jawaban Naman ini) adalah rute saya akan mengambil.
sumber
Anda dapat membuat
StringBuilder
kunci for dengan pengecualian dan memeriksa apakahele
numerik seperti di bawah ini,Semoga ini bisa membantu.
sumber
Mungkin Anda dapat menulis metode pembantu yang dapat memeriksa angka dalam string dan menyaringnya dari aliran dan juga nilai-nilai nol lalu akhirnya mengumpulkan ke Peta.
Ini akan mengurus semuanya.
Dan gunakan ini di aliran Anda.
sumber