【发布时间】:2019-08-11 20:59:47
【问题描述】:
所以,我一直在玩一些 java 流,发现一些非常令人沮丧的事情。
我想列出这种类型的对象(客户),然后使用流过滤掉所有这些高兴 == 错误的对象。
package com.company;
public class Customer {
public String name;
public int points;
public boolean glad;
public Customer(String name, int points, boolean glad) {
this.name = name;
this.points = points;
this.glad = glad;
}
public boolean isGlad() {
return this.glad;
}
}
每当我尝试使用常规数组时,一切似乎都正常:
Customer kunde1 = new Customer("jens", 20, true);
Customer kunde2 = new Customer("marie", 20, false);
Customer kunde3 = new Customer("niels", 20, false);
Customer kunde4 = new Customer("jens", 20, true);
Customer kunde5 = new Customer("jens", 20, true);
Customer[] kunderne = {kunde1,kunde2,kunde3,kunde4,kunde5};
Customer[] filtered = Stream.of(kunderne)
.filter(Customer::isGlad)
.toArray(Customer[]::new);
但每当我尝试从数组以外的东西(如 ArrayList)创建流时,我无法访问我的 lambda 语句中的对象属性
ArrayList<Customer> customers = new ArrayList<>();
Customer kunde1 = new Customer("jens", 20, true);
Customer kunde2 = new Customer("marie", 20, false);
Customer kunde3 = new Customer("niels", 20, false);
Customer kunde4 = new Customer("jens", 20, true);
Customer kunde5 = new Customer("jens", 20, true);
customers.add(kunde1);
customers.add(kunde2);
customers.add(kunde3);
customers.add(kunde4);
customers.add(kunde5);
Customer[] filtered = Stream.of(kunderne)
.filter(Customer::isGlad)
.toArray(Customer[]::new);
但这段代码甚至不会运行。为什么会发生这种情况,为什么它似乎只适用于数组?
【问题讨论】:
标签: java arraylist java-stream