Java 8 Stream 过滤器对象列表按键。排除列表中的键并获取字符串

Inê*_*mes 1 java reduce dictionary filter java-stream

我想从一个列表中排除对象,其中 id 包含在另一个 Id 列表中,并获得一个字段名称字符串。" Care, Safe"

例子:

public interface Selectable {
     Long getId();
     String getName();
}
Run Code Online (Sandbox Code Playgroud)

我有一个 list<Selectable> tenants

id, name
34, "House"
35, "Care"
36, "Villa"
37, "Safe"
Run Code Online (Sandbox Code Playgroud)

而另一个 List<Long> idTenantsWithAlerts

id
34
36
Run Code Online (Sandbox Code Playgroud)

我需要的结果String tenantsNoAlerts"Care, Safe"

我对 java8 流没有太多经验,所以我尝试了相同的过滤器、映射和减少......但没有运气。

Pol*_*ome 6

您可以通过过滤列表Id,然后map,再collect加盟收藏家,以减少Stream一个String

List<Selectable> tenants;
String tenantsNoAlerts = tenants.stream()
    .filter(entry -> !idTenantsWithAlerts.contains(entry.getId()))
    .map(entry -> entry.getName())
    .collect(Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

  • 我认为它应该是`!idTenantsWithAlerts.contains(entry.getId())`,因为那些`id`将被排除,否则这可能是OP想要的。 (2认同)