Java 8 串流Stream
蒐集元素排除元素null的寫法範例如下。
當要從集合物件List
或Set
中搜集元素時,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;
}
參考:
沒有留言:
張貼留言