为了从List<Map<String, Object>>中过滤出所有键为"type"且值为"p"的元素,并创建一个新的列表,可以使用Java 8引入的流(Stream)API来简化这个过程。下面是一个示例代码片段:

import java.util.*;
import java.util.stream.Collectors;

public class FilterExample {
    public static void main(String[] args) {
        // 示例数据
        List<Map<String, Object>> originalList = Arrays.asList(
            Map.of("type", "p", "content", "paragraph 1"),
            Map.of("type", "h1", "content", "header"),
            Map.of("type", "p", "content", "paragraph 2")
        );

        // 过滤逻辑
        List<Map<String, Object>> filteredList = originalList.stream()
            .filter(map -> "p".equals(map.get("type")))
            .collect(Collectors.toList());

        // 输出结果
        filteredList.forEach(System.out::println);
    }
}

上述代码做了以下几件事:

  • 使用stream()方法将原始列表转换成一个流。
  • 使用filter()方法根据给定条件(即"type"键对应的值是否等于"p")来过滤流中的元素。
  • 使用Collectors.toList()收集过滤后的元素到一个新的列表中。
  • 最后,通过遍历打印过滤后的列表。

如果正在使用的Java版本不支持Map.of()这种简洁的构造方式,或者Map对象不是不可变的,请确保用适当的方式创建和填充Map对象。

请注意,如果Map中的键或值可能为null,应该在比较之前进行空检查,以避免潜在的NullPointerException异常。例如,可以将过滤条件改为如下形式:

.filter(map -> "p".equals(map.getOrDefault("type", "")))

这会确保即使"type"不存在于map中,也不会抛出NullPointerException,而是默认返回空字符串,从而不会匹配。