1.JDK Stream流的使用方式

    1. 1. 获取流
    2. 单列集合:使用Collection接口中的默认方法stream()生成流
    3. ArrayList<String> list = new ArrayList<>();
    4. list.stream().forEach(li-> System.out.println(li));
    5. 双列集合:不能直接获取stream 要先通过keySet或者entrySet获取一个Set集合,在获取Stream
    6. HashMap<String, String> hm = new HashMap<>();
    7. // 获取map集合的健集合 , 在进行输出打印
    8. hm.keySet().stream().forEach(s -> System.out.println(s));
    9. // 获取map集合的entry对象 , 在输出打印
    10. hm.entrySet().stream().forEach(s -> System.out.println(s));
    11. 数组: Arrays中的静态方法stream()生成
    12. int[] arr = {1, 2, 3, 4, 5, 6};
    13. Arrays.stream(arr).forEach(s -> System.out.println(s));
    14. 2.中间操作
    15. 过滤filter():从一个数组中筛选出来一些数据。
    16. List<Student> collect1 = studentList.stream() // 获取流
    17. .filter(s -> s.getSex().equals(1)) //过滤 只保留性别为男的 返回值是boolean类型
    18. .collect(Collectors.toList()); //将处理后的结果收集到list集合中
    19. 截取limit():截取指定参数个数的数据
    20. List<Student> limitList = studentList.stream()
    21. .limit(2) //只取前两条数据
    22. .collect(Collectors.toList());
    23. 跳过skip():跳过指定参数个数的数据
    24. List<Student> skipList = studentList.stream()
    25. .skip(2) //跳过前两条 取后面的数据
    26. .collect(Collectors.toList());
    27. 去重distinct(): 去除流中重复元素 基于hashCodeequals方法
    28. List<Student> collect2 = studentList.stream().
    29. distinct().
    30. collect(Collectors.toList());
    31. 求和sum()、求最大值max()、求最小值min();
    32. 排序sort():将流中元素按照类里面的某个属性进行排序
    33. / Comparator比较器排序:创建TreeSet对象的时候传递Comparator的实现类对象,
    34. 重写compare方法,根据返回值进行排序
    35. // 按照自然排序的规则排序
    36. list2.stream()
    37. .sorted()
    38. .forEach(s->{System.out.println(s);});
    39. // 自定义比较器规则排序
    40. list.stream().sorted(new Comparator<String>() {
    41. @Override
    42. public int compare(String o1, String o2) {
    43. return o1.length() - o2.length();
    44. }
    45. }).forEach(s->{
    46. System.out.println(s);
    47. });
    48. // 按照类里面的某个属性进行排序
    49. studentList.stream()
    50. .sorted(Comparator.comparing(Student::getAge).reversed())
    51. .collect(Collectors.toList());
    52. 快速匹配anyMatch(): 快速在集合中找到指定的数据
    53. //是否存在学号为0001的人
    54. boolean match = studentList.stream()
    55. .anyMatch(detail -> "0001".equals(detail.getStudentNo()));
    56. 3.终结操作
    57. forEach(); 对流中的每一个元素执行操作
    58. //打印流中的所有元素
    59. list.stream()
    60. .forEach(s->{
    61. System.out.println(s);
    62. });
    63. count(); 返回流中元素的数量
    64. long count=list.stream().count();
    65. 4.收集操作:Collectors
    66. Collector 接口中方法的实现决定了如何对流执行收集操作(如收集到 ListSetMap)。
    67. 但是 Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器.
    68. list.stream().collect(Collectors.toList()); //把流中元素收集到List
    69. list.stream().collect(Collectors.toSet()); //把流中元素收集到Set
    70. list.stream().collect(Collectors.toCollection(ArrayList::new)); //把流中元素收集到创建的集合
    71. list.stream().collect(Collectors.counting()); //计算流中元素的个数
    72. list.stream().collect(Collectors.summingInt(User::getAge)); //对流中元素的整数属性求和
    73. list.stream().collect(Collectors.averagingInt(User::getAge)); //计算流中元素Integer属性的平均值
    74. list.stream().collect(Collectors.summarizingInt(User::getAge)); //收集流中Integer属性的统计值。如:平均值
    75. list.stream().collect(Collectors.groupingBy(User::getAge)); //根据某属性值对流分组,属性为K,结果为V
    76. 最大值maxBy和最小值 minBy

    2.发布文章的流程(业务流程,涉及表,具体实现)