如何从具有字符串 属性 的对象映射中获取一组字符串

How obtain a Set of Strings from a Map of objects with a string property

我需要从给定的 Map<String, Account> 中获取带有 accountNumbersSet<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)并且没有必要。

注意: 流没有 终端操作(如 collectcountforEach 等)将永远不会被执行mapfilter被称为中间操作.

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