标签:p3 test4 Stream 常见 list add 操作 com PersonData
一、Java Colletion按对象属性分组、分组汇总、过滤等操作示例
@Data public class PersonData { private String id; private String type; private String name; private int age; }
对象PersonData使用了Lombook的@Data注解。
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Test { public static void main(String[] args){ List<PersonData> list = new ArrayList<PersonData>(); PersonData p1 = new PersonData(); p1.setId("1"); p1.setName("张三"); p1.setType("管理员"); p1.setAge(20); list.add(p1); PersonData p2 = new PersonData(); p2.setId("2"); p2.setName("李四"); p2.setType("管理员"); p2.setAge(30); list.add(p2); PersonData p3 = new PersonData(); p3.setId("3"); p3.setName("王五"); p3.setType("用户"); p3.setAge(40); list.add(p3); PersonData p4 = new PersonData(); p4.setId("4"); p4.setName("马六"); p4.setType("访客"); p4.setAge(50); list.add(p4); //跟据某个属性分组 Map<String, List<PersonData>> collect = list.stream().collect(Collectors.groupingBy(PersonData::getType)); System.out.println(collect); //根据某个属性分组,汇总某个属性 Map<String, Integer> collect2 = list.stream().collect(Collectors.groupingBy(PersonData::getType,Collectors.summingInt(PersonData::getAge))); System.out.println(collect2); //根据某个属性添加条件过滤数据, list = list.stream().filter(u -> !u.getType().equals("访客")).collect(Collectors.toList()); System.out.println(list); //判断一组对象里面有没有属性值是某个值 boolean add = list.stream().anyMatch(m -> "王五".equals(m.getName())); System.out.println(add); //取出一组对象的某个属性组成一个新集合 List<String> names=list.stream().map(PersonData::getName).collect(Collectors.toList()); System.out.println(names); } }
结果输出:
{用户=[com.test4.PersonData@19a45b3], 访客=[com.test4.PersonData@99a589], 管理员=[com.test4.PersonData@372a00, com.test4.PersonData@dd8dc3]} {用户=40, 访客=50, 管理员=50} [com.test4.PersonData@372a00, com.test4.PersonData@dd8dc3, com.test4.PersonData@19a45b3] true [张三, 李四, 王五]
标签:p3,test4,Stream,常见,list,add,操作,com,PersonData 来源: https://www.cnblogs.com/echo1937/p/13069230.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。