Lambda表达式基础练习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37722734/article/details/82148490

Java8之Lambda表达式概念篇:https://www.jianshu.com/p/67ebee04b2b3

Java8之Stream类:https://www.jianshu.com/p/c53eb31752c4

1.新建list Test和User实体类


import java.util.Calendar;
import java.util.Objects;

import lombok.Data;

@Data
public class User {
	String userName;
	String passWord;
    @Override
    public boolean equals(Object obj) {
        /*if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (passWord == null) {
            if (other.passWord != null)
                return false;
        } else if (!passWord.equals(other.passWord))
            return false;
        if (userName == null) {
            if (other.userName != null)
                return false;
        } else if (!userName.equals(other.userName))
            return false;
        return true;*/
        if (obj == this) return true;
        if (!(obj instanceof User)) {
            return false;
        }
        User user = (User) obj;
 
        return 
                Objects.equals(userName, user.userName) &&
                Objects.equals(passWord, user.passWord);
    }
    @Override
    public int hashCode() {
       /* final int prime = 31;
        int result = 1;
        result = prime * result + ((passWord == null) ? 0 : passWord.hashCode());
        result = prime * result + ((userName == null) ? 0 : userName.hashCode());
        return result;*/
        return Objects.hash(passWord, userName);
    }
	
	

	public User(String userName, String passWord) {
		super();
		this.userName = userName;
		this.passWord = passWord;
	}
	public String getUserName() {
		return userName;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
}
public class LambdaTest {
    
   static  List<User> list=new ArrayList<User>(){
        {
            add(new User("a","b"));
            add(new User("a1","b1"));
            add(new User("a222","b2"));
            add(new User("a","bb"));
            add(new User("a","bbc"));
            add(new User("a3","b1"));
            add(new User("a44","b2"));
        }
    };
}

2.lambda表达式forEach两种遍历方式

 @Test
    public void test082401() {
        String[] atp = {"1", "2","3","4"};  
         List<String> players =  Arrays.asList(atp);  
         // 使用 lambda 表达式以及函数操作(functional operation)  
         players.forEach((player) -> System.out.print(player + "; "));  
         
         // 在 Java 8 中使用双冒号操作符(double colon operator)  
         players.forEach(System.out::print);
    }

3.list集合的四种遍历方式

 @Test
    public void test082402() {
    
        //第一种遍历方式
        Iterator<Integer> it=list.iterator();
        while(it.hasNext()) {
            System.out.print(it.next()+" ");
        }
        System.out.println("\n-------------我是分割线-----------------");
        //第二种遍历方式
        for(Integer i:list) {
            System.out.print(i+" ");
        }
        //第三种遍历方式
        System.out.println("\n-------------我是分割线-----------------");
        //第四种遍历方式
        list.forEach(s->System.out.print(s+" "));
        System.out.println("\n-------------我是分割线-----------------");
        list.forEach(System.out::print);
    }

4.lambda线程实现的4种方式

  @Test
    public void test082403() {
        //1.1使用匿名内部类  
 /*       new Thread(new Runnable() {  
            @Override  
            public void run() {  
                System.out.println("Hello world !");  
            }  
        }).start(); */ 
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("test2018082701");
            }
        }).start();
        new Thread(()->System.out.println("test2018082702")).start();
        new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("test2018082703");
            }
        }.run();
        Runnable r2=()->System.out.println("test2018082704");
        r2.run();
       /* // 1.2使用 lambda expression  
        new Thread(() -> System.out.println("Hello world !")).start();  
          
        // 2.1使用匿名内部类  
        Runnable race1 = new Runnable() {  
            @Override  
            public void run() {  
                System.out.println("Hello world !");  
            }  
        };  
          
        // 2.2使用 lambda expression  
        Runnable race2 = () -> System.out.println("Hello world !");  
           
        // 直接调用 run 方法(没开新线程哦!)  
        race1.run();  
        race2.run();*/
    }

5.lambda排序方式

@Test
    public void test082701() {
        String[] players = {"1", "3","2","0"};
        System.out.println("排序前:");
        List<String> list= Arrays.asList(players);
        list.forEach(s->System.out.print(s+" "));
        
        Arrays.sort(players, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // TODO Auto-generated method stub
                return o1.compareTo(o2);
            }
        });
        System.out.println("\n排序后:");
        List<String> list1= Arrays.asList(players);
        list1.forEach(s->System.out.print(s+" "));
        
    }

 @Test
    public void test082702() {
        String[] players = {"1", "3","2","0"};
       /* Comparator<String> sortlsit=(String s1,String s2)->(s1.compareTo(s2));
        Arrays.sort(players,sortlsit);*/
        Arrays.sort(players,(String s1,String s2)->(s1.compareTo(s2)));
        Arrays.asList(players).forEach(s->System.out.print(s+" "));
    }

6.lambda遍历list对象

 @Test
    public void test082703() {
        //list.forEach((s)->System.out.printf("%s  %s;",s.getUserName(),s.getPassWord()));
        list.forEach(s->System.out.println(s.getPassWord()+" "+s.getUserName()));
    }

7.lambda调用get、set

@Test
    public void test082704() {
       // Consumer<User> user=u->u.setUserName(u.getUserName()+"Test");
        list.forEach(u->u.setUserName(u.getUserName()+"0828"));
        list.forEach(s->System.out.println(s));
    }

8.lambda定义过滤器

@Test
    public void test082801() {
        list.stream()
            .filter(p->p.getUserName().equals("a"))
            .limit(1)
            .forEach(s->System.out.println(s.getPassWord()+" "));
    }

9.lambda排序在stream中处理

@Test
    public void test082803() {
//        List<User> sortedJavaProgrammers =list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).collect(Collectors.toList());
        list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).limit(2).collect(Collectors.toList()).forEach(p->System.out.println(p+" "));
//        list.stream().sorted((p1,p2)->p1.getUserName().compareTo(p2.getUserName())).limit(2).forEach(p->System.out.println(p+" "));
    }

10.stream自带方法max、min

@Test
    public void test082804() {
        User maxUser=list.stream().max((p1,p2)->p1.getUserName().length()-p2.getUserName().length()).get();
        User minUser=list.stream().min((p1,p2)->p1.getUserName().length()-p2.getUserName().length()).get();
        System.out.println(maxUser+" \n"+minUser);
    }

11.stream将list对象类型转化成String(字符串型)/Set(无序不重复)/TreeSet类型(有序不重复)。

  @Test
    public void test082805() {
        String strUser=list.stream().map(User::getUserName).collect(Collectors.joining(";"));
        Set<String> setUser=list.stream().map(User::getUserName).collect(Collectors.toSet());
        TreeSet<String> treeUser=list.stream().map(User::getUserName).collect(Collectors.toCollection(TreeSet::new));
        int totalSalary =list.parallelStream().mapToInt(p->p.getUserName().length()).sum();
        System.out.println(strUser+"\n"+setUser+"\n"+treeUser+"\n"+totalSalary);
    }

12.获取对象值并取得getCount、getAverage、getMax、getSum等

 @Test
    public void test082806() {
        List<Integer> intNum= Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ;
        IntSummaryStatistics summaryStatistics=intNum.stream().mapToInt(x->x).summaryStatistics();
        System.out.println(summaryStatistics.getCount()+" "+summaryStatistics.getAverage()+" "+summaryStatistics.getMax());
    }

猜你喜欢

转载自blog.csdn.net/qq_37722734/article/details/82148490