zoukankan      html  css  js  c++  java
  • 测试java的Lambda语法

    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.IntSummaryStatistics;
    import java.util.List;
    import java.util.function.Consumer;
    import java.util.function.Predicate;
    import java.util.function.Supplier;
    import java.util.stream.Collectors;
    
    public class LambdaTest {
    
        @Test
        public void test1() {
            // 用匿名内部类的方式来创建线程
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("用匿名内部类的方式来创建线程!");
                }
            }).start();
    
            // 使用Lambda来创建线程
            new Thread(() -> System.out.println("使用Lambda来创建线程!")).start();
            Runnable runnable = () -> System.out.println("Lambda语法实现runnable");
            new Thread(runnable).start();
    
            List<String> items = new ArrayList<>();
            items.add("A");
            items.add("B");
            items.add("C");
            items.add("D");
            items.add("E");
    
            //lambda
            //Output : A,B,C,D,E
            items.forEach(item->System.out.println(item));
    
        }
    
        @Test
        public void test2(){
            // Consumer 一个入参,无返回值
            Consumer<String> consumer = s -> System.out.println(s);
            consumer.accept("Lambda语法Consumer案例!");
    
            Consumer<String> consumer1 = System.out::println;
            consumer.accept("Lambda语法Consumer案例2!");
    
            // Supplier 无入参,有返回值
            Supplier<String> supplier = () -> "Lambda语法Supplier案例!";
            String s = supplier.get();
            System.out.println(s);
    
            //Supplier<Category> categorySupplier = Category::new;
            //System.out.println(categorySupplier);
        }
    
        @Test
        public void test3(){
            //lambda表达式和函数式接口Predicate
            List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
    
            System.out.println("Languages which starts with J :");
            //调用自己方法filter 第一个参数为集合,第二个过滤条件
            filter(languages, (str) -> ((String)str).startsWith("J"));
    
            System.out.println("Languages which ends with a ");
            filter(languages, (str) -> ((String)str).endsWith("a"));
    
            System.out.println("Print all languages :");
            filter(languages, (str) -> true);
    
            System.out.println("Print no language : ");
            filter(languages, (str) -> false);
    
            System.out.println("streamFilter Test : ");
            testFilter(languages);
    
            //map
        }
        public static void filter(List<String> names, Predicate condition) {
           /* names.forEach(s -> {
                if (condition.test(s)){
                    System.out.println(s);
                }
            });*/
            //filter()方法是获得一个新的列表,且其每个元素符合过滤原则
            names.stream().filter(condition).forEach(System.out::println);
    
        }
    
        //lambda表达式中加入Predicate
        public static void testFilter(List<String> names){
            Predicate<String> startsWithJ = (n) -> n.startsWith("J");
            Predicate<String> fourLetterLong = (n) -> n.length() == 4;
            names.stream()
                    .filter(startsWithJ.and(fourLetterLong)) //filter 验证是否符合该过滤条件 and or ..
                    .forEach((n) -> System.out.print("nName, which starts with 'J' and four letter long is : " + n));
        }
    
        @Test
        public void strTest(){
            List<String> strList = Arrays.asList("abc", "bcd", "defg", "jk");
            // 创建一个字符串列表,每个字符串长度大于2 filter()生成一个新的集合
            List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList());
            System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
        }
    
        @Test
        public void mapTest(){
            //使用lambda表达式的Map和Reduce示例
            List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
            //map替换array值并遍历
            costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);
    
            //使用lambda表达式的Map示例 map替换值之后 reduce计算list的总和
            double bill = costBeforeTax.stream().map((cost) -> cost + .12*cost)
                    .reduce((sum, cost) -> sum + cost).get();
            System.out.println("总和:"+bill);
        }
    
        //流的distinct()方法去重
        @Test
        public void distinctTest(){
            // 用所有不同的数字创建一个正方形列表
            List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
            List<Integer> distinct = numbers.stream().distinct().collect(Collectors.toList());
            System.out.printf("Original List : %s,  Square Without duplicates : %s %n", numbers, distinct);
        }
    
        //集合操作
        @Test
        public void operateTest(){
            //获取数字的个数、最小值、最大值、总和以及平均值
            List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
            IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics();
            System.out.println("Highest prime number in List : " + stats.getMax());
            System.out.println("Lowest prime number in List : " + stats.getMin());
            System.out.println("Sum of all prime numbers : " + stats.getSum());
            System.out.println("Average of all prime numbers : " + stats.getAverage());
    
        }
    
    }
  • 相关阅读:
    idea报错。Error:Failed to load project configuration: cannot parse xml file E:project.ideaworkspace.xml: Error on line 1: 前言中不允许有内容。
    数据库索引的使用
    sql查询每个学生的最高成绩mysql语句
    Tomcat下没有编译后的class文件
    fullpage中大的图片超过一屏怎么在手机端滑动显示?
    springmvc拦截器的配置、使用
    过滤器、拦截器中重定向无限循环问题解决
    Linux下的Memcache安装
    Windows下的Memcache安装
    jQuery学习资源参考教程网址推荐
  • 原文地址:https://www.cnblogs.com/hnzkljq/p/11692172.html
Copyright © 2011-2022 走看看