当前位置: 代码迷 >> 综合 >> Stream Lambda 表达式常用功能测试
  详细解决方案

Stream Lambda 表达式常用功能测试

热度:87   发布时间:2023-11-21 07:22:27.0

Stream &Lambda 表达式常用功能测试


@SpringBootTest
class Jdk8DemoApplicationTests {
    /*测试lambda 表达式*/@Testpublic void lambdaTest(){
    //遍历集合并输出Arrays.asList( "a", "b", "d" ).forEach(e -> System.out.println( e ) );System.out.println("------------------------------------------------------------");//指定元素的类型,并遍历输出Arrays.asList( "a", "b", "d" ).forEach( ( String e ) -> System.out.println( e ) );System.out.println("------------------------------------------------------------");//遍历集合后进行复杂的逻辑处理,使用{} 进行封装Arrays.asList( "a", "b", "d" ).forEach( e -> {
    if (e.equals("a")){
    System.out.println("是a");}} );System.out.println("------------------------------------------------------------");//Lambda表达式可以引用类成员和局部变量(会将这些变量隐式得转换成final的),会将 separator变量 在lambda表达式中变为finalString separator = ",";Arrays.asList( "a", "b", "d" ).forEach(( String e ) -> System.out.print( e + separator ) );System.out.println("------------------------------------------------------------");//Lambda表达式有返回值,返回值的类型也由编译器推理得出。如果Lambda表达式中的语句块只有一行,则可以不用使用return语句Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> e1.compareTo( e2 ) );//等价于/*Arrays.asList( "a", "b", "d" ).sort( ( e1, e2 ) -> {int result = e1.compareTo( e2 );return result;} ); */}@Testpublic void streamTest(){
    List<User> userList = Arrays.asList(new User("用户1", 16, 0),new User("用户2", 17, 1),new User("用户3", 18, 0),new User("用户4", 19, 1),new User("用户5", 20, 0),new User("用户6", 21, 1),new User("用户7", 22, 0));//获取流并进行集合set化,然后遍历输出userList.stream().collect(Collectors.toSet()).forEach(System.out::println);System.out.println("------------------------------------------------------------");//获取流,filter 遍历集合,根据->后的逻辑获取对应的过滤的集合,然后使用collect进行集合化,最后遍历输出userList.stream().filter(user -> user.getAge()>18 && user.getSex().equals(0)).collect(Collectors.toSet()).forEach(System.out::println);System.out.println("------------------------------------------------------------");/*map()方法的参数为Function(函数式接口)对象,map()方法将流中的所有元素用Function对象进行运算,生成新的流对象(流的元素类型可能改变)。*/List<Integer> numbers = Arrays.asList(-1, -2, 0, 4, 5);numbers.stream().map( n -> Math.abs(n)).forEach(n ->  System.out.println("Element abs: " + n));System.out.println("------------------------------------------------------------");/*flatMap 和 map 的区别*/List<String> list = Arrays.asList("1 2", "3 4", "5 6");list.stream().flatMap(item -> Arrays.stream(item.split(" "))).forEach(System.out::println);list.stream().map(item -> Arrays.stream(item.split(" "))).forEach(n ->n.forEach(System.out::println));System.out.println("------------------------------------------------------------");/*reduce 累加器*/List<Integer> numbers1 = Arrays.asList(-1, -2, 0, -1, 4, 5, 1);Integer total = numbers1.stream().reduce((t, n) -> t + n).get();System.out.println("Total: " + total);System.out.println("------------------------------------------------------------");/*collect方法*/numbers1.stream().collect(Collectors.toCollection(ArrayList::new)).forEach(System.out::println);System.out.println("------------------------------------------------------------");/*limit 限制输出的个数为2*/numbers1.stream().filter(n -> n>0).limit(2).forEach(System.out::println);System.out.println("------------------------------------------------------------");/*sorted 进行排序*/numbers1.stream().sorted().forEach(System.out::println);System.out.println("------------------------------------------------------------");/*sorted 使用compare 方法进行排序,变换两个变量的位置可实现正序和倒序*/numbers1.stream().sorted((o1,o2)->o1.compareTo(o2)).forEach(System.out::println);System.out.println("------------------------------------------------------------");numbers1.stream().sorted((o1,o2)->o2.compareTo(o1)).forEach(System.out::println);System.out.println("------------------------------------------------------------");/*map 中的Function 函数式接口,一个参数,一个返回值*/numbers1.stream().map(t->t+=2).forEach(System.out::println);}}
  相关解决方案