我有以下地图。
private static Map<String, String[]> createMap(){
Map<String, String[]> map = new HashMap<>();
map.put("A", new String[]{null});
map.put("B", new String[]{"Banana"});
map.put("C", new String[]{""});
map.put("D", new String[]{"Duck"});
return map;
}
我想把这张地图转换成 Map<String, String>
需要输出 :
键:B值:香蕉
键:D值:鸭子
我想用 Java 8 Stream APIs
而我尝试的一个解决方案是
final Map<String, String[]> collect = createMap().entrySet().stream()
.filter(e -> e.getValue()[0] != null && !"".equals(e.getValue()[0]))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
collect.forEach((key, value) -> System.out.println("Key :" + key + " Value :" + Arrays.toString(value)));
但这是给我 Map<String, String[]>
和输出是
键:B 值:[香蕉]
键:D值:[鸭子]
我怎样才能告诉Collector只从 Map.Entry
价值?
你可以这样做。
map.entrySet().stream()
.filter(entry -> Stream.of(entry.getValue()[0])
.anyMatch(s -> s != null && !s.isEmpty()))
.collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue()[0]))
通过你的代码。
Map<String, String> collect = map.entrySet().stream()
.filter(e -> e.getValue()[0] != null && !e.getValue()[0].isEmpty())
.collect(Collectors.toMap(Map.Entry::getKey, entry->entry.getValue()[0]));