电商网站 收费与免费,兰州网站建设方法,给公司建网站 深圳,大连seo加盟日常开发中#xff0c;我们可能会遇到这样一种情况#xff0c;需要对数据库查询出来的数据进行一个二次处理#xff0c;从而达到我们需要的数据结构。stream流正是java8提供的对复杂list操作方便工具。 我们先介绍如何使用stream流根据对象属性对复杂list对象去重#xff0…日常开发中我们可能会遇到这样一种情况需要对数据库查询出来的数据进行一个二次处理从而达到我们需要的数据结构。stream流正是java8提供的对复杂list操作方便工具。 我们先介绍如何使用stream流根据对象属性对复杂list对象去重再介绍一下stream流最常用的一些操作
使用stream流根据对象属性对复杂list对象去重
例子1
实体类
import lombok.Data;Data
public class SyncUserDto {private String id;private String name;private String code;private String departmentCode;private String departmentName;private String position;private String phone;private String mobile;private String email;private Integer sex;private String idcard;private Integer status;private String account;private String weighting;private String photourl;private String openid;private String userid;
}去重操作 //去重ArrayListSyncUserDto collect syncUserDtos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() - new TreeSet((o1, o2) - {if (o1.getAccount().compareTo(o2.getAccount()) 0) {return 0;} else {return o1.getAccount().compareTo(o2.getAccount());}})), ArrayList::new));例子2
实体类
public class User {private String id;private String name;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 User(String id, String name) {super();this.id id;this.name name;}
}
去重
public class Demo {public static void main(String[] args) {ListUser list new ArrayList();User u1 new User(a, aaa);User u2 new User(a, aaa);User u3 new User(b, aaa);User u4 new User(a, b);User u5 new User(b, a);list.add(u1);list.add(u2);list.add(u3);list.add(u4);list.add(u5);list.add(u1);list.add(u2);list.add(u3);list.add(u4);list.add(u5);ListUser uniquelist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()-new TreeSet((o1,o2)-{if (o1.getName().compareTo(o2.getName()) 0) {return 0;} else {return o1.getName().compareTo(o2.getName());}})), ArrayList::new));System.out.println(根据对象属性name进行去重);System.out.println(---------- 去重前----------);System.out.println(集合中元素的个数为list.size());for (User user : list) {System.out.println(user.toString()--姓名user.getName());}System.out.println(-----------去重后----------);System.out.println(集合中元素的个数为unique.size());for (User user : unique) {System.out.println(user.toString()--姓名user.getName());}}
}stream流常用操作
forEach()遍历流中的对象
public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(张三);list.add(李四);list.add(李四);list.add(李四);list.add(李四);list.add(李四);list.add(李四);//遍历流的对象list.stream().forEach((name) - System.out.println(name));}
filter()filter对流对象进行过滤 public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(张三);list.add(李四二);list.add(李四我);list.add(李四去晚);list.add(李四请问);list.add(李四去);list.add(李四我);//过滤流的对象list.stream().filter((name) - name.length()2);}
map()map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型 public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);//map()是对集合中的对象进行映射的,将对象从一种类型转换成另一种类型list.stream().map(num - Integer.parseInt(num));}}count()count是对流数据统计的方法但是count之后返回的是long类型所以无法再进行流操作。
public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);//count()对流数据进行统计System.out.println(list.stream().count());}}limit()选取流数据的前多少条数据 public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(李四1);list.add(李四2);list.add(李四3);list.add(李四4);list.add(李四5);list.add(李四6);list.add(李四7);//limit() 选取流数据的前多少条数据list.stream().limit(2);}
}skip()跳过流数据的前多少条数据该方法与limit()方法刚好相反
public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(李四1);list.add(李四2);list.add(李四3);list.add(李四4);list.add(李四5);list.add(李四6);list.add(李四7);//skip() 跳过流数据的前多少条数据list.stream().skip(2);}
}concat()Stream的静态方法concat()实现对两个流数据进行合并
public class Aoo {public static void main(String[] args) {// 定义一个集合ArrayListString list new ArrayList();list.add(李四1);list.add(李四2);list.add(李四3);list.add(李四4);list.add(李四5);list.add(李四6);list.add(李四7);// 定义一个集合ArrayListString list1 new ArrayList();list1.add(1);list1.add(2);list1.add(3);list1.add(4);list1.add(5);list1.add(6);list1.add(7);//concat()实现对两个流数据进行合并Stream.concat(list.stream(),list1.stream());}}