java8集合对象的交集
实体类
package test04;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class NodePojo {
private String nodeName;
private String nodeValue;
}
操作类
package test04;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.stream.Collectors;
public class NodeTest {
public static void main(String[] args) {
List<NodePojo> list1 = Lists.newArrayList();
list1.add(new NodePojo("node_0","1_a"));
list1.add(new NodePojo("node_1","2_b"));
list1.add(new NodePojo("node_2","2_c"));
List<NodePojo> list2 = Lists.newArrayList();
list2.add(new NodePojo("node_0","2_a"));
list2.add(new NodePojo("node_1","2_b"));
list2.add(new NodePojo("node_2","2_c"));
/**
* JDK8集合新特性,取交集
* filter跟foreach类似,如果原来是List<T>,取的就是T对象
* 箭头后面跟的是过滤的条件
* 过滤好了之后需要把流转回集合
*/
List<NodePojo> filterList = list1.stream().filter(
item ->list2.stream().map(e -> e.getNodeValue())
.collect(Collectors.toList())
.contains(item.getNodeValue()))
.collect(Collectors.toList());
System.out.println("第一次JDK8集合过滤之后:");
filterList.forEach(item->{
System.out.println(item.toString());
});
List<NodePojo> list3 = Lists.newArrayList();
list3.add(new NodePojo("node_0","2_a"));
list3.add(new NodePojo("node_1","2_b"));
list3.add(new NodePojo("node_2","1_c"));
List<NodePojo> filterList2 = filterList.stream().filter(
item ->list3.stream().map(e -> e.getNodeValue())
.collect(Collectors.toList())
.contains(item.getNodeValue()))
.collect(Collectors.toList());
System.out.println("第二次JDK8集合过滤之后:");
filterList2.forEach(item->{
System.out.println(item.toString());
});
}
}
结果为
第一次JDK8集合过滤之后:
NodePojo(nodeName=node_1, nodeValue=2_b)
NodePojo(nodeName=node_2, nodeValue=2_c)
第二次JDK8集合过滤之后:
NodePojo(nodeName=node_1, nodeValue=2_b)