網頁

2019/9/18

Java 8 Lambda Stream collect 排除 null 元素

Java 8 串流Stream蒐集元素排除元素null的寫法範例如下。


當要從集合物件ListSet中搜集元素時,Java 8可使用Stream.collect來搜集。若元素中有null的情況,可用以下方式排除。

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) {

        List<Customer> customerList = new ArrayList<>();
        customerList.add(new Customer(1L, "Ryu"));
        customerList.add(new Customer(2L, "Ken"));
        customerList.add(new Customer(3L, null));
        customerList.add(null);
        customerList.add(new Customer(5L, null));
        customerList.add(new Customer(6L, "Zangief"));
        
        
        List<String> nameList1 = customerList.stream()
                .filter(Objects::nonNull) // 過濾掉Customer為null的元素
                .map(e -> e.getName())    
                .filter(Objects::nonNull) // 過濾掉Customer.getName()為null的元素
                .collect(Collectors.toList());
        
        
        System.out.println(nameList1); // [Ryu, Ken, Zangief]
        
    }

}

class Customer {
    
    private Long id;
    private String name;
    
    public Customer(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    // getters and setters
    
}

.filter(Objects::nonNull)Method References(方法參考)的寫法,
原本的寫法是.filter(e -> Objects.nonNull(e))

Objects.nonNull(Object obj)相當於obj != null,原始碼如下。

public static boolean nonNull(Object obj) {
    return obj != null;
}

參考:

沒有留言:

張貼留言