Lambda表达式 (Lambda expressions)

  1. public static void main(String[] args) {
  2. List<String> numbers = Arrays.asList("one", "two", "three", "four", "five");
  3. // 使用匿名内部类实现
  4. Collections.sort(numbers, new Comparator<String>() {
  5. @Override
  6. public int compare(String o1, String o2) {
  7. return o2.compareTo(o1);
  8. }
  9. });
  10. // 使用Lambda实现
  11. Collections.sort(numbers,(String o1,String o2)->{
  12. return o2.compareTo(o1);
  13. });
  14. // 进行简化
  15. Collections.sort(numbers,(o1,o2)->o2.compareTo(o1));
  16. // 使用内置函数进行替换
  17. Collections.sort(numbers, Comparator.reverseOrder());
  18. }

Stream API

用来更方便地操作一组数据

生成流

把集合数据变成流数据的过程

  1. public void test01(){
  2. //第一种方法
  3. //Arrays.stream();
  4. //第二种方法,直接对List集合进行操作
  5. //第三种方法,直接使用stream.of()
  6. List<String> collect = Stream.of("one", "tow", "three")
  7. .filter(s -> s.startsWith("o"))
  8. .collect(Collectors.toList());
  9. System.out.println(collect);
  10. // 通过 迭代器 生成流
  11. var list = Stream.iterate(0,n->n+1)
  12. .limit(10)
  13. .peek(n -> log.debug("the number is :{}",n))
  14. .collect(Collectors.toList());
  15. // 通过 generate 生成
  16. var list2 = Stream.generate(()-> Math.random())
  17. .limit(10).collect(Collectors.toList());
  18. }

处理流

对生成的流数据进行处理

中间操作

  • filter
  • map
  • peek
  • findAny
  • findFirst

    终止操作

  • forEach

  • anyMatch
  • noneMatch

    统计操作

  • count

  • min
  • max

    转换流

    把处理后的流数据变回Java中的集合数据
    1. public void test01(){
    2. var list2 = Stream.generate(()-> Math.random())
    3. .limit(10)
    4. .collect(Collectors.toList());
    5. }