Java_函數式接口&Stream流式計算

函數式接口

在這裏插入圖片描述

//R apply(T t);函數型接口,一個參數,一個返回值
Function<String,Integer> function = t ->{return t.length();};
System.out.println(function.apply("abcd"));

//boolean test(T t);斷定型接口,一個參數,返回boolean
Predicate<String> predicate = t->{return t.startsWith("a");};
System.out.println(predicate.test("a"));

//void accept(T t);消費型接口,一個參數,沒有返回值
Consumer<String> consumer = t->{
    System.out.println(t);
};
consumer.accept("javaXXXX");

//T get(); 供給型接口,無參數,有返回值
Supplier<String> supplier =()->{return UUID.randomUUID().toString();};
System.out.println(supplier.get());

流(Stream)

流是數據渠道,用於操作數據源(集合、數組等)所生成的元素序列。
“集合講的是數據,流講的是計算!”

特點

  • Stream 自己不會存儲元素
  • Stream 不會改變源對象。相反,會返回一個持有結果的新Stream。
  • Stream 操作是延遲執行的。這意味着他們會等到需要結果的時候才執行。

操作階段

  1. 創建一個Stream:一個數據源(數組、集合)
  2. 中間操作:一箇中間操作,處理數據源數據
  3. 終止操作:一個終止操作,執行中間操作鏈,產生結果

demo

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.function.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
class User
{
    private Integer id;
    private String  userName;
    private int     age;
}

/**
 * @create 2019-02-26 22:24
 *
 * 題目:請按照給出數據,找出同時滿足
 *      偶數ID且年齡大於24且用戶名轉爲大寫且用戶名字母倒排序
 *      最後只輸出一個用戶名字
 */
public class StreamDemo
{
    public static void main(String[] args)
    {
        User u1 = new User(11,"a",23);
        User u2 = new User(12,"b",24);
        User u3 = new User(13,"c",22);
        User u4 = new User(14,"d",28);
        User u5 = new User(16,"e",26);

        List<User> list = Arrays.asList(u1,u2,u3,u4,u5);

        list.stream().filter(p -> {
            return p.getId() % 2 == 0;
        }).filter(p -> {
            return p.getAge() > 24;
        }).map(f -> {
            return f.getUserName().toUpperCase();
        }).sorted((o1, o2) -> {
            return o2.compareTo(o1);
        }).limit(1).forEach(System.out::println);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章