https://blog.csdn.net/chenshun123/article/details/78122467

 

package 第一天;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Formatter;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Locale;
import java.util.function.Predicate;
import java.util.stream.Collector;
import java.util.stream.Collectors;

import javax.swing.JButton;

/**
 * java8 的lambda 表达式的运用 10種用法
 * 
 * @author js
 * @see https://www.jdon.com/idea/java/10-example-of-lambda-expressions-in-java8.html
 *
 */
public class Lambda {

    public static void main(String[] args) {
        // 使用()->{} 代替匿名类

        /*
         * new Thread(new Runnable() {
         * 
         * @Override public void run() { System.out.println("before java8"); }
         * }).start();
         * 
         * new Thread(()-> {System.out.println("in java8");}).start();
         */

        // 实现事件处理
        /*
         * JButton jbutton=new JButton("button"); jbutton.addActionListener(new
         * ActionListener() {
         * 
         * @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated
         * method stub System.out.println("without lambda expression is boring"); } } );
         * 
         * jbutton.addActionListener((e)->{
         * System.out.println("Action !! Lambda expressions Rocks"); });
         */

        // 利用Lambda 表达式来遍历list 集合
        /*
         * List list=Arrays.asList("1","2","3","4"); for (Object object : list) {
         * System.err.print(object); }
         * 
         * list.forEach(n->{System.out.print(n);});
         * 
         * list.forEach(System.err::print);
         */

        // 使用Lambda 表达式和函数接口

        /*List list2 = Arrays.asList("am", "bs", "cd", "dsm");

        filter(list2, (str) -> ((String) str).startsWith("a"));

        filter(list2, (str) -> ((String) str).endsWith("s"));

        filter(list2, (str) -> true);

        filter(list2, (str) -> false);

        filter(list2, (str) -> ((String) str).length() > 2);*/

        // 复杂的结合Preicate 使用
/*
        Predicate<String> startWithJ = (n) -> n.startsWith("c");

        Predicate<String> fourLetterLong = (n) -> n.length() ==2 ;

        list2.stream().filter(startWithJ.and(fourLetterLong)).forEach((n) -> {
            System.err.println("开头为j 长度为4 的为:" + n);
        });
*/
        //使用Lambda实现Map 和Reduce 
    
        /*List<Integer> list3=Arrays.asList(100,200,300,400,500);
        double total = 0;
        for (Integer c : list3) {
            double p=c+.12*c;
            System.err.println(p);
        }
        
        list3.stream().map((c)->c+.12*c)
        .forEach(System.out::println);
        */
        //reduce() 是将集合中所有值结合进一个,Reduce类似SQL语句中的sum(), avg() 或count(), 
        
    /*    for (Integer c : list3) {
            double p=c+.12*c;
            total=total+p;
        }
        System.err.println("total:"+total);
        
        double m=list3.stream().map((c)->c+.12*c)
        .reduce((sum,c)->sum+c).get();
        
        System.err.println("total:"+m);*/
        
        //通過filtering 創建一個字符串String集合
        /*List<String> strList = Arrays.asList("hhhh", "xxxx", "bbbb", "lll");
        List<String> filtered = strList.stream().filter(x -> x.length()> 3)
                .collect(Collectors.toList());
        System.out.printf("Original List : %s, filtered list : %s %n", 
        strList, filtered);//第一個字符串為替換規則
        */
        //對集合每一個元素應用函數
        /*List<String>  list6=Arrays.asList("1q1","2w2","3e3");
        
        String json=list6.stream().map(x->x.toUpperCase()).collect(Collectors.joining(","));
         
        System.err.println(json);*/
        
        //通過複製不同的值創建一個子列表
        
        List<Integer> list7=Arrays.asList(1,4,3,2,5);
        
        List<Integer> distinct =list7.stream().map(i->i*i)
                .distinct().collect(Collectors.toList());
        
        /*System.out.printf("Original List : %s,  Square Without duplicates : %s %n",
                list7, distinct);*/
        Formatter formatter=new Formatter();
        Formatter f=formatter.format(Locale.getDefault(),"%s,  Square Without duplicates : %s %n", list7,distinct);
        System.err.println(f.toString());
        
        //计算List中的元素的最大值,最小值,总和及平均值
        
        /*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());
        */
                
    }


    
    public static void filter(List names, Predicate condition) {
        names.stream().filter((name) -> (condition.test(name))).forEach((name) -> {
            System.err.println(name + "");
        });
    }

    
    
    
}

 

posted on 2018-12-03 17:10  JSBK  阅读(158)  评论(0)    收藏  举报