1. 程式人生 > >java8 lambda使用匯總

java8 lambda使用匯總

從java8出現以來lambda是最重要的特性之一,它可以讓我們用簡潔流暢的程式碼完成一個功能。 很長一段時間java被吐槽是冗餘和缺乏函數語言程式設計能力的語言,隨著函數語言程式設計的流行java8種也引入了 這種程式設計風格。在此之前我們都在寫匿名內部類幹這些事,但有時候這不是好的做法,本文中將介紹和使用lambda, 帶你體驗函數語言程式設計的魔力。
lambda表示式語法結構:
在lambda表示式中,通過如下形式來實現lambda的使用

expression = (variable) -> action
  1. variable 代表變數
  2. action則是實現程式碼的邏輯部分
    包含多個引數時:
int sum = (x, y) -> x + y;

sum 用來接收計算的結果,lambda省略了return。

lambda表示式使用方式

1、 foreach
在java8之前,迴圈列表的方式主要有兩種,一種是普通的for迴圈。

List<String> item = new ArrayList<String>();
item.add("A");
item.add("B");
item.add("C");
item.add("D");
for(int i=0;i<item.size();i++){
	//程式碼段
}

一種是foreach方法。

for(String id:item){
	//程式碼段
}

其中ids 為一個List型別例項。
使用lambda表示式

item.foreach(a->{
//程式碼段
});

2、利用lambda獲取一個list的值並賦值給另一個list
在Java8之前,需要迴圈List,在迴圈中賦值拷貝。java8 Stream提供了collect方法,可以很好的處理賦值問題。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().map(string -> {
            return "stream().map()處理之後:" + string;
        }).collect(Collectors.toList());
        
        list2.stream().forEach(string -> {
            System.out.println(string);
        });

3、利用stream().filter() 對list進行過濾。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().filter(s -> s != "1").collect(Collectors.toList());
        System.out.println(list2.toString());

4、利用stream對List做記憶體分頁。

List<String> list1 = Lists.newArrayList();
        List<String> list2 = Lists.newArrayList();
        list1.add("1");
        list1.add("1");
        list1.add("2");
        list1.add("3");
 
        list2 = list1.stream().filter(s -> s != "1").skip(pageNo * pageSize).limit(pageSize).collect(Collectors.toList());
        System.out.println(list2.toString());

注意這裡的pageNo必須從0開始,否則第一頁的資料查詢不到。

5、通過stream.distict()對List資料進行去重處理

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 5, 5, 5, 6, 7);
 
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctNumbers);//1, 2, 3, 4, 5, 6, 7

但是distinct只能提供對基本型別的去重,如果是個User型別則需要寫一個過濾器實現,distinct不直接提供設定過濾條件。

以上就是基本的lambda表示式的使用方式了。