分组和遍历

  1. @Test
  2. void testMap() {
  3. List<Student> students = new ArrayList<>();
  4. students.add(new Student(1, "zhang", 10, LocalDateTime.now()));
  5. students.add(new Student(1, "zhang2", 100, LocalDateTime.now()));
  6. students.add(new Student(2, "wang", 11, LocalDateTime.now()));
  7. students.add(new Student(3, "lin", 12, LocalDateTime.now()));
  8. Map<Integer, List<Student>> collect = students.stream().collect(Collectors.groupingBy(Student::getAge));
  9. Set<Map.Entry<Integer, List<Student>>> entries = collect.entrySet();
  10. entries.stream().forEach(
  11. resultByAge->{
  12. System.out.println(resultByAge.getKey());
  13. resultByAge.getValue().forEach(
  14. System.out::println
  15. );
  16. }
  17. );
  18. }

结果如下

  1. 1
  2. Student(age=1, name=zhang, weight=10, localDateTime=2021-11-16T00:32:08.732)
  3. Student(age=1, name=zhang2, weight=100, localDateTime=2021-11-16T00:32:08.732)
  4. 2
  5. Student(age=2, name=wang, weight=11, localDateTime=2021-11-16T00:32:08.732)
  6. 3
  7. Student(age=3, name=lin, weight=12, localDateTime=2021-11-16T00:32:08.732)

映射拼接

项目中比较常见将数字组合的数据转换成中文后再进行拼接,往常是用split方法变为数组,再遍历数据,再拼接,比较麻烦,用流回直接一些

  1. String jobCN = Arrays.stream(split).map(str -> codeLoader.getCodeStrToZwIfExists(str, "DM_JOB")).collect(Collectors.joining(","));

集合或者数组中有时候需要将首字母大写

  1. Stream.of("aaa", "bbb", "ccc")
  2. // 首字母大写方法, String::toUpperCase是所有字母大写
  3. .map(StringUtils::capitalize)
  4. .forEach(System.out::println);

过滤筛选

使用filter代替for循环判断筛选数据信息,使代码语义更加明确

  1. stringObjectMap.entrySet().stream().filter(e -> Objects.nonNull(e.getValue())).forEach(
  2. entry -> {
  3. System.out.println(entry.getKey() + ":" + entry.getValue());
  4. }
  5. );
  1. List<Sku> collect = cartSkuList.stream()
  2. .filter(sku -> SkuCategoryEnum.ELECTRONICS.equals(sku.getSkuCategory()))
  3. .collect(Collectors.toList());

大杂烩

  1. @Test
  2. public void test1() {
  3. Comparator<Integer> com = Integer::compare;
  4. TreeSet<Integer> integers = new TreeSet<>(com);
  5. integers.add(2);
  6. integers.add(3);
  7. integers.add(1);
  8. System.out.println(integers);
  9. }
  10. @Test
  11. public void test2() {
  12. List<EmpolyeeEntity> empolyeeEntities = initList();
  13. List<EmpolyeeEntity> collect = empolyeeEntities.stream().filter(i -> i.getAge() > 5)
  14. .filter(i -> i.getSalary().compareTo(new BigDecimal(50)) > 0)
  15. .collect(Collectors.toList());
  16. System.out.println(collect);
  17. // 两个字段同时降序(升序)
  18. List<EmpolyeeEntity> collect1 = empolyeeEntities.stream()
  19. .sorted(comparing(EmpolyeeEntity::getAge)
  20. .thenComparing(EmpolyeeEntity::getSalary).reversed())
  21. .collect(Collectors.toList());
  22. System.out.println(collect1);
  23. // 更具某个字段找最小的数据,最大同理
  24. EmpolyeeEntity obj = empolyeeEntities.stream()
  25. .min(comparing(EmpolyeeEntity::getAge)).orElse(new EmpolyeeEntity());
  26. System.out.println(obj);
  27. }
  28. @Test
  29. public void test3() {
  30. List<EmpolyeeEntity> empolyeeEntities = initList();
  31. Integer integer = empolyeeEntities.stream()
  32. .filter(i -> i.getAge() < 10)
  33. .map(EmpolyeeEntity::getAge).reduce(Integer::sum).orElse(0);
  34. System.out.println(integer);
  35. Integer sum = empolyeeEntities.stream()
  36. .filter(i -> i.getAge() < 10)
  37. .mapToInt(EmpolyeeEntity::getAge).sum();
  38. System.out.println(sum);
  39. }
  40. @Test
  41. public void test4() {
  42. String name = Optional.of(new EmpolyeeEntity(null, 1, new BigDecimal(5)))
  43. .orElse(new EmpolyeeEntity("1", 2, new BigDecimal(10)))
  44. .getName();
  45. System.out.println(name);
  46. }
  47. @Test
  48. public void test5() {
  49. boolean b = Stream.of(null, "", "00", "1").allMatch(value -> StringUtils.isBlank(value) || "00".equals(value));
  50. System.out.println(b);
  51. }
  52. @Test
  53. public void test6() {
  54. // 合理使用contains 可代替anymatch
  55. List<String> strings = Arrays.asList(null, "", "00");
  56. System.out.println(strings.contains(null));
  57. }
  58. @Test
  59. public void test7() {
  60. EmpolyeeEntity empolyeeEntity = new EmpolyeeEntity();
  61. Field[] declaredFields = empolyeeEntity.getClass().getDeclaredFields();
  62. Arrays.stream(declaredFields).forEach(System.out::println);
  63. }
  64. @Test
  65. public void test8() {
  66. List<String> strings = Arrays.asList("张三", "王都是", "王地方是");
  67. String string = strings.stream()
  68. .filter(i -> i.startsWith("王"))
  69. .mapToInt(String::length)
  70. .max()
  71. .toString();
  72. System.out.println(string);
  73. }
  74. @Test
  75. public void test9() {
  76. boolean b = Stream.of("1", "2", "3").noneMatch(i -> i.equals("4"));
  77. System.out.println(b);
  78. }
  79. private List<EmpolyeeEntity> initList() {
  80. return Arrays.asList(
  81. new EmpolyeeEntity("zhang", 5, new BigDecimal(100)),
  82. new EmpolyeeEntity("li", 10, new BigDecimal(200)),
  83. new EmpolyeeEntity("wang", 10, new BigDecimal(400)),
  84. new EmpolyeeEntity("chen", 15, new BigDecimal(50)),
  85. new EmpolyeeEntity("lin", 20, new BigDecimal(10))
  86. );
  87. }