【发布时间】:2016-10-21 14:39:23
【问题描述】:
我正在尝试对属性中的计算值进行分组。计算的值是可选的 - 更清楚一点,他是一个简化的例子:
class Foo:
int id;
Group group;
.. some other stuff
class Group:
String groupId;
... (some other stuff)
class SomeName:
String someAttribute;
class Converter:
public Optional<SomeName> getSomenameFromGroup(Group)
我无法更改 Converter 中的方法,因为它不属于我。
我有一个 Foo 列表,我想通过 SomeName 的“someAttribute”进行过滤。
例如,我有这样的事情:
Map<String, List<Foo>> fooBySomeName =
fooList.stream().collect(Collectors
.groupingBy(foo -> {
Optional<SomeName> name =
converter.getSomenameFromGroup(foo.getGroup.getGroupId());
return name.isPresent() ? name.get().someAttribute() : "";
}));
但问题是,如果 groupingBy 语句中不存在名称,我不希望地图中出现任何内容。我有这样的事情:
fooBySomeNames.remove("")
我认为可以从按该键分组的地图中删除任何内容,但是在 groupingBy 语句中是否有更清洁或更正确的方法来执行此操作?
【问题讨论】:
标签: java java-stream optional collectors