Java8中怎么操作Stream 对集合
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,今天就跟大家聊聊有关 Java8中怎么操作Stream 对集合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先为了说明Stream对对象集合
千家信息网最后更新 2024年09月22日Java8中怎么操作Stream 对集合
今天就跟大家聊聊有关 Java8中怎么操作Stream 对集合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
首先为了说明Stream对对象集合的操作,新建一个Student类(学生类),覆写了equals()和hashCode()方法
public class Student { private Long id; private String name; private int age; private String address; public Student() {} public Student(Long id, String name, int age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(id, student.id) && Objects.equals(name, student.name) && Objects.equals(address, student.address); } @Override public int hashCode() { return Objects.hash(id, name, age, address); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
filter(筛选)
public static void main(String [] args) { Student s1 = new Student(1L, "肖战", 15, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); List streamStudents = testFilter(students); streamStudents.forEach(System.out::println); } /** * 集合的筛选 * @param students * @return */ private static List testFilter(List students) { //筛选年龄大于15岁的学生// return students.stream().filter(s -> s.getAge()>15).collect(Collectors.toList()); //筛选住在浙江省的学生 return students.stream().filter(s ->"浙江".equals(s.getAddress())).collect(Collectors.toList()); }
运行结果:
这里我们创建了四个学生,经过filter的筛选,筛选出地址是浙江的学生集合。
map(转换)
public static void main(String [] args) { Student s1 = new Student(1L, "肖战", 15, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); testMap(students); } /** * 集合转换 * @param students * @return */ private static void testMap(List students) { //在地址前面加上部分信息,只获取地址输出 List addresses = students.stream().map(s ->"住址:"+s.getAddress()).collect(Collectors.toList()); addresses.forEach(a ->System.out.println(a)); }
运行结果
map就是将对应的元素按照给定的方法进行转换。
distinct(去重)
public static void main(String [] args) { testDistinct1(); } /** * 集合去重(基本类型) */ private static void testDistinct1() { //简单字符串的去重 Listlist = Arrays.asList("111","222","333","111","222"); list.stream().distinct().forEach(System.out::println); }
运行结果:
public static void main(String [] args) { testDistinct2(); } /** * 集合去重(引用对象) */ private static void testDistinct2() { //引用对象的去重,引用对象要实现hashCode和equal方法,否则去重无效 Student s1 = new Student(1L, "肖战", 15, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Student s5 = new Student(1L, "肖战", 15, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); students.add(s5); students.stream().distinct().forEach(System.out::println); }
运行结果:
可以看出,两个重复的"肖战"同学进行了去重,这不仅因为使用了distinct()方法,而且因为Student对象重写了equals和hashCode()方法,否则去重是无效的。
sorted(排序)
public static void main(String [] args) { testSort1(); } /** * 集合排序(默认排序) */ private static void testSort1() { Listlist = Arrays.asList("333","222","111"); list.stream().sorted().forEach(System.out::println); }
运行结果:
public static void main(String [] args) { testSort2(); } /** * 集合排序(指定排序规则) */ private static void testSort2() { Student s1 = new Student(1L, "肖战", 15, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); students.stream() .sorted((stu1,stu2) ->Long.compare(stu2.getId(), stu1.getId())) .sorted((stu1,stu2) -> Integer.compare(stu2.getAge(),stu1.getAge())) .forEach(System.out::println); }
运行结果:
上面指定排序规则,先按照学生的id进行降序排序,再按照年龄进行降序排序
limit(限制返回个数)
public static void main(String [] args) { testLimit(); } /** * 集合limit,返回前几个元素 */ private static void testLimit() { Listlist = Arrays.asList("333","222","111"); list.stream().limit(2).forEach(System.out::println); }
运行结果:
skip(删除元素)
public static void main(String [] args) { testSkip(); } /** * 集合skip,删除前n个元素 */ private static void testSkip() { Listlist = Arrays.asList("333","222","111"); list.stream().skip(2).forEach(System.out::println); }
运行结果:
reduce(聚合)
public static void main(String [] args) { testReduce(); } /** * 集合reduce,将集合中每个元素聚合成一条数据 */ private static void testReduce() { Listlist = Arrays.asList("欢","迎","你"); String appendStr = list.stream().reduce("北京",(a,b) -> a+b); System.out.println(appendStr); }
运行结果:
min(求最小值)
public static void main(String [] args) { testMin(); } /** * 求集合中元素的最小值 */ private static void testMin() { Student s1 = new Student(1L, "肖战", 14, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); Student minS = students.stream().min((stu1,stu2) ->Integer.compare(stu1.getAge(),stu2.getAge())).get(); System.out.println(minS.toString()); }
运行结果:
上面是求所有学生中年龄最小的一个,max同理,求最大值。
anyMatch/allMatch/noneMatch(匹配)
public static void main(String [] args) { testMatch(); } private static void testMatch() { Student s1 = new Student(1L, "肖战", 15, "浙江"); Student s2 = new Student(2L, "王一博", 15, "湖北"); Student s3 = new Student(3L, "杨紫", 17, "北京"); Student s4 = new Student(4L, "李现", 17, "浙江"); Liststudents = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); students.add(s4); Boolean anyMatch = students.stream().anyMatch(s ->"湖北".equals(s.getAddress())); if (anyMatch) { System.out.println("有湖北人"); } Boolean allMatch = students.stream().allMatch(s -> s.getAge()>=15); if (allMatch) { System.out.println("所有学生都满15周岁"); } Boolean noneMatch = students.stream().noneMatch(s -> "杨洋".equals(s.getName())); if (noneMatch) { System.out.println("没有叫杨洋的同学"); } }
看完上述内容,你们对 Java8中怎么操作Stream 对集合有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
浙江
结果
运行
湖北
排序
学生
北京
元素
杨紫
对象
方法
最小
内容
地址
年龄
同学
规则
杨洋
最大
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
ado与数据库的关系
数学差能学计算机网络技术吗
数据库图书档案查询
苏州个人软件开发
软件开发部门副经理薪资
杨浦区网络安全创新服务
网络安全执法培训讲话
努力维护网络安全
自然科学领域期刊论文数据库
杭州仕佳网络技术有限公司带货
软件开发的自学资料
腾讯云服务器哪里看id
数据库为何不用倒排索引
查找数据库中表结构相同的表
软件开发h5课本内容
常熟正规网络技术服务费
刀塔怎么匹配中国服务器
徐汇区上门软件开发厂家售后保障
南京新品服务器服务商
数据库和系统工程师
长沙网络安全监督局
服务器怎么检测坏内存
oracle数据库的状态
长江存储找软件开发吗
网络安全应急演练效果
网络安全工程师在国企好不好
刀塔怎么匹配中国服务器
计算机网络技术自考本科
纵横互联网科技有限公司
数据库缓存失败是什么原因