• 使用stream流来对结果进行计算


    java.util.stream包下有一个Stream接口,有很多实用的方法,常用的几个:

    Stream filter(Predicate predicate)返回由与此给定谓词匹配的此流的元素组成的流。
    Stream map(Function mapper)返回由给定函数应用于此流的元素的结果组成的流。
    Stream sorted()返回由此流的元素组成的流,根据自然顺序排序。
    Stream sorted(Comparator comparator)返回由该流的元素组成的流,根据提供的 Comparator进行排序。
    Stream limit(long maxSize)返回由此流的元素组成的流,截短长度不能超过 maxSize 。
    思考题:一分钟内完成此题,只能用一行代码实现!
    现在有5个用户,筛选:
    1、ID 必须是偶数
    2、年龄必须大于23岁
    3、用户名转为大写字母
    4、用户名字母倒着排序
    5、只输出一个用户

    1. import java.util.Arrays;
    2. import java.util.List;
    3. /**
    4. * 其中sort为什么知道是通过name排序?因为上一步是通过map拿到了用户的name
    5. */
    6. public class MyTest{
    7. public static void main(String[] args) {
    8. User u1 = new User(1,"a",21);
    9. User u2 = new User(2,"b",22);
    10. User u3 = new User(3,"c",23);
    11. User u4 = new User(4,"d",24);
    12. User u5 = new User(6,"e",25);
    13. List list = Arrays.asList(u1, u2, u3, u4, u5);
    14. list.stream().filter(u->{return u.getId()%2==0;}).filter(u->{return u.getAge()>23;})
    15. .map(u->{return u.getName().toUpperCase();}).sorted((uu1,uu2)->{return uu2.compareTo(uu1);})
    16. .limit(1).forEach(System.out::println);
    17. //System.out::println就是把你遍历出来的每一个对象都用来去调用System.out
    18. // (也就是PrintStream类的一个实例)的println方法。
    19. //Consumer c1 = System.out::println;等价于
    20. //Consumer c2 = (x)->System.out.println(x);
    21. }
    22. }
    23. class User{
    24. private int id;
    25. private String name;
    26. private int age;
    27. public User(int id, String name, int age) {
    28. this.id = id;
    29. this.name = name;
    30. this.age = age;
    31. }
    32. public int getId() {
    33. return id;
    34. }
    35. public void setId(int id) {
    36. this.id = id;
    37. }
    38. public String getName() {
    39. return name;
    40. }
    41. public void setName(String name) {
    42. this.name = name;
    43. }
    44. public int getAge() {
    45. return age;
    46. }
    47. public void setAge(int age) {
    48. this.age = age;
    49. }
    50. @Override
    51. public String toString() {
    52. return "User{" +
    53. "id=" + id +
    54. ", name='" + name + '\'' +
    55. ", age=" + age +
    56. '}';
    57. }
    58. }

    开发小技巧:如何对三级分类列表进行封装?

    stream加递归调用

    注意排序的时候要注意排序是否为null

    1. @Override
    2. public List listWithTree() {
    3. //查出所有的分类
    4. List entities = baseMapper.selectList(null);
    5. //组装成父子的树形结构,使用stream来完成
    6. //过滤所有的一级分类并将其转换成list
    7. List level1 = entities.stream().filter((categoryEntity) -> categoryEntity.getParentCid() == 0).map((menu) -> {
    8. menu.setChildren(getChildren(menu, entities));
    9. return menu;
    10. }).sorted((menu1, menu2) -> { return (menu1.getSort()==null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());}).collect(Collectors.toList());
    11. return level1;
    12. }
    13. //递归查找所有菜单的子菜单
    14. //找出root的所有子菜单的同时找到子菜单的子菜单,递归调用
    15. //核心在于通过过滤找到一级菜单的子菜单后,通过map流再次调用找子菜单的方法,以便找到所有的二级菜单的子菜单
    16. private List getChildren(CategoryEntity root, List all) {
    17. List children = all.stream().filter(categoryEntity -> categoryEntity.getParentCid() == root.getCatId()).map((categoryEntity -> {
    18. categoryEntity.setChildren(getChildren(categoryEntity, all));
    19. return categoryEntity;
    20. })).sorted((menu1, menu2) -> { return (menu1.getSort()==null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());}).collect(Collectors.toList());
    21. return children;
    22. }

  • 相关阅读:
    docker容器中访问本地宿主机的服务
    方法研究在长安福特总装系统改进中的应用
    【JavaWeb】会话的学习笔记:Cookie和Session的知识点,这一次我总算学明白了
    【MySQL学习笔记】(八)复合查询
    从零打造“乞丐版” React(一)——从命令式编程到声明式编程
    前端 webpack 面试题
    近似熵 样本熵 模糊熵
    深度入门 Android 车机核心 CarService 的构成和链路
    笙默考试管理系统-MyExamTest----codemirror(34)
    【Python】Pycharm中设置使用conda的虚拟环境(保姆级图文)
  • 原文地址:https://blog.csdn.net/qq_44185887/article/details/126558309