最近在学习过程中,发现了很多以前没有用到过的语法以及随着JDK的更新出现的新特性,所以之后会进行分享自己觉得有必要记录的一些“进阶语法”。
先看代码:
public class FilterTest {
public static void main(String[] args) {
List<String> list = List.of("a","b");
List<Node> nodeList = List.of(
new Node("abc","测试"),
new Node("bac","测试"));
Map<String, List<Node>> map = new HashMap<>();
list.forEach(item ->
map.put(
item, filter(nodeList, node ->
node.getId().startsWith(item)
)
)
);
System.out.println(map);
}
public static <T> List<T> filter(Collection<T> collection, Predicate<? super T> predicate) {
return collection.stream().filter(predicate).collect(Collectors.toList());
}
}
解释:使用list
列表中的每个元素作为键,对nodeList
进行过滤,过滤条件是节点的ID以列表中的元素为前缀。然后将过滤后的结果放入map
中。
List.of(...)
List<String> list = List.of("a","b");
自 Java 9 开始,JDK里面为集合(List、Set、Map)都添加了of
和copyOf
方法,它们两个都用来创建不可变的集合。
filter
函数其中涉及到了两个filter
函数,一个是自己写的,另一个是使用java.util.stream.Stream
下的filter
函数。
关于自己编写的filter
函数,这是一个泛型方法,接收一个集合和一个断言(即一个可以接受集合中元素并返回布尔值的函数),然后通过流API(java.util.stream.Stream
)从集合中过滤出满足断言的元素,并将这些元素收集到一个新的列表中。
关于java.util.stream.Stream
下的filter
函数,用于筛选出满足特定条件的元素,创建一个包含这些元素的新流。