Java8流处理方式
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
核心处理
根据姓名和年纪来进行过滤
List<String> same = allData.stream()
.map(t -> excelData
.stream()
.filter(s -> Objects.nonNull(t.getName())
&& Objects.nonNull(s.getName())
&& Objects.equals(t.getName(), s.getName())
&& Objects.nonNull(t.getAge())
&& Objects.nonNull(s.getAge())
&& Objects.equals(t.getAge(), s.getAge())
)
.findAny()
.orElse(null))
.filter(Objects::nonNull)
.map(r->r.getRowIndex())
.collect(Collectors.toList());
具体详见后续说明
Demo实体类
public class Demo {
private String id;
private String name;
private String age;
private String rowIndex;
public Demo() {
}
public Demo(String id, String name, String age, String rowIndex) {
this.id = id;
this.name = name;
this.age = age;
this.rowIndex = rowIndex;
}
@Override
public String toString() {
return "Demo{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age='" + age + '\'' +
", rowIndex='" + rowIndex + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getRowIndex() {
return rowIndex;
}
public void setRowIndex(String rowIndex) {
this.rowIndex = rowIndex;
}
}
测试类
```java
@Test
void testA(){
List<Demo> allData = Arrays.asList(
new Demo("1", "张三","20",null),
new Demo("2", "李四","20",null),
new Demo("3", "王五","25",null),
new Demo("3", "小白","26",null),
new Demo("3", "小白","25",null),
new Demo("4", "赵六","26",null));
System.out.println("相同的人姓名集合:" + allData);
List<Demo> excelData = Arrays.asList(
new Demo( null,"张三","20","20"),
new Demo(null,"李四","21","21"),
new Demo( null,"小红","25","22"),
new Demo( null,"小白","26","23"));
System.out.println("相同的人姓名集合:" + excelData);
List<String> same = allData.stream()
.map(t -> excelData
.stream()
.filter(s -> Objects.nonNull(t.getName())
&& Objects.nonNull(s.getName())
&& Objects.equals(t.getName(), s.getName())
&& Objects.nonNull(t.getAge())
&& Objects.nonNull(s.getAge())
&& Objects.equals(t.getAge(), s.getAge())
)
.findAny()
.orElse(null))
.filter(Objects::nonNull)
.map(r->r.getRowIndex())//如需获取重复对象,将此行进行注释,改用对象集合接收
.collect(Collectors.toList());
System.out.println("TheSameList集合:" + same);
版权声明:本文为weixin_44109687原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。