[英]Java 8 : how to extract a HashMap from a ArrayList of HashMap in Java 8 using streams?
[英]Extract HashMap from an ArrayList of Hashmap by using lambda expression with Java 8
我需要找到一个 Hashmap,它的 is_default 值等于 1。
注意:在这个结构体中,只有1个hashmap包含is_default值等于1。
您只需要检查那些包含所需密钥的地图。 之后,您需要从中选择具有所需键值的那个。 可以filter
来完成
list.stream()
.filter(x -> x.containsKey("is_default"))
.filter(x -> x.get("is_default")
.compareTo(BigDecimal.ONE) == 0)
.forEach(System.out::println);
或者您可以使用getOrDefault
并将错误值指定为默认值以跳过那些不包含键的映射
list.stream()
.filter(x -> x.getOrDefault("is_default", BigDecimal.ZERO)
.compareTo(BigDecimal.ONE) == 0)
.forEach(System.out::println);
例子
public static void main(String[] args) {
List<Map<String, BigDecimal>> list = new ArrayList<>();
// target
Map<String, BigDecimal> map = new HashMap<>();
map.put("is_default", BigDecimal.ONE);
map.put("key", BigDecimal.TEN);
list.add(map);
Map<String, BigDecimal> map2 = new HashMap<>();
map2.put("is_default", BigDecimal.ZERO);
map2.put("key", BigDecimal.ZERO);
list.add(map2);
Map<String, BigDecimal> map3 = new HashMap<>();
map3.put("isnt_default", BigDecimal.ZERO);
list.add(map3);
list.stream()
.filter(x -> x.containsKey("is_default"))
.filter(x -> x.get("is_default")
.compareTo(BigDecimal.ONE) == 0)
.forEach(System.out::println);
}
Output
{is_default=1, key=10}
尝试这个。
public static void main(String[] args) {
List<Map<String, String>> list = List.of(
Map.of("is_default", "0", "label", "test0"),
Map.of("is_default", "1", "label", "test1"),
Map.of("is_default", "2", "label", "test2"));
Map<String, String> extracted = list.stream()
.filter(map -> Objects.equals(map.get("is_default"), "1"))
.findFirst().orElse(null);
System.out.println(extracted);
}
output:
{label=test1, is_default=1}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.