如何从具有字符串 属性 的对象映射中获取一组字符串
How obtain a Set of Strings from a Map of objects with a string property
我需要从给定的 Map<String, Account>
中获取带有 accountNumbers
的 Set<String>
并通过仅保留 [=] 过滤 地图内容 25=]活跃账户 (active == true
) 这样就不会有非活跃账户了。
账号 class有以下属性:
private String number;
private String owner;
private double balance;
private boolean active = true;
目前我的解决方案如下所示:
public Set<String> getAccountNumbers() {
return new HashSet<String>(accounts.values().stream().filter(Account::isActive));
}
我试过投射,但似乎没用。有人可以告诉我,我如何从这里访问属性编号?
您必须应用 map
才能将帐户流 Stream<Account>
转换为字符串流 Stream<String>
。然后应用终端操作collect
得到一个Set
作为stream pipeline的执行结果
您尝试将流传递给 HashSet
的构造函数是不正确的(它需要 Collection
,而不是 Stream
)并且没有必要。
注意: 流没有 终端操作(如 collect
, count
、forEach
等)将永远不会被执行。 map
和filter
被称为中间操作.
public Set<String> getAccountNumbers() {
return accounts.values().stream() // Stream<Account>
.filter(Account::isActive)
.map(Account::getNumber) // Stream<String>
.collect(Collectors.toSet());
}
For more information on streams take a look at this tutorial
我需要从给定的 Map<String, Account>
中获取带有 accountNumbers
的 Set<String>
并通过仅保留 [=] 过滤 地图内容 25=]活跃账户 (active == true
) 这样就不会有非活跃账户了。
账号 class有以下属性:
private String number;
private String owner;
private double balance;
private boolean active = true;
目前我的解决方案如下所示:
public Set<String> getAccountNumbers() {
return new HashSet<String>(accounts.values().stream().filter(Account::isActive));
}
我试过投射,但似乎没用。有人可以告诉我,我如何从这里访问属性编号?
您必须应用 map
才能将帐户流 Stream<Account>
转换为字符串流 Stream<String>
。然后应用终端操作collect
得到一个Set
作为stream pipeline的执行结果
您尝试将流传递给 HashSet
的构造函数是不正确的(它需要 Collection
,而不是 Stream
)并且没有必要。
注意: 流没有 终端操作(如 collect
, count
、forEach
等)将永远不会被执行。 map
和filter
被称为中间操作.
public Set<String> getAccountNumbers() {
return accounts.values().stream() // Stream<Account>
.filter(Account::isActive)
.map(Account::getNumber) // Stream<String>
.collect(Collectors.toSet());
}
For more information on streams take a look at this tutorial