Java8中怎么操作Stream 对集合
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,今天就跟大家聊聊有关 Java8中怎么操作Stream 对集合,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先为了说明Stream对对象集合
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
崇明区现代软件开发服务产品介绍
vc2019如何建立数据库
疫情防控下的网络安全
我的世界服务器安全类
uptade数据库
安卓软件开发与小程序
网络技术部门信息技术部门
数据库如何创建聚集
数据库图形化下载叫什么
拉萨旧服务器
国家对于网络安全的认识
cydia 环境数据库
计算机软件开发专业知识
网络安全知识点一百字
奇迹没有服务器选项
安宁正规软件开发报价表
网络安全的事例脱口秀
贝壳找房软件开发者
学软件开发的五年大专官网
中储智运软件开发怎么样
美国本科网络安全专业
php软件开发招聘信息
怎样统计数据库记录数
怀柔区软件开发诚信合作
128g服务器内存
如何抵御黑客攻击服务器
迅雷网络技术扣款
网络安全初学者入门书籍
网站的数据库位置
做个网络安全员多少钱