如何从第一个元素中获得另一个集合内的第一个元素?



我想找到最有效的方法来找到集合的第一个元素,这是在另一个集合中,我也采取第一个条目。我觉得这很"丑"。解决方案。

public class UnitLine {}

public class Unit {
private Collection<UnitLine> unitLines;
public Collection<UnitLine> getUnitLines() {
return unitLines;
}

}

public class Wrapper {
Collection<Unit> units;
public Collection<Unit> getUnits() {
return units;
}

}

public static void main(String[] args) {
Wrapper wrapper = new Wrapper();
Unit unit = wrapper.getUnits().stream().findFirst().orElseGet(null);
if (unit != null) {
UnitLine unitLine = unit.getUnitLines().stream().findFirst().orElseGet(null);
if (unitLine != null) {
// do something
}
}
}

将Optional转换为null意味着您无法利用Optional的优秀特性。下面是等效的代码,它有用地使用了可选的maporElse:

UnitLine unitLine = wrapper.getUnits().stream()
.findFirst()
.map(Unit::getLines)
.orElse(Collections.emptySet()).stream()
.findFirst()
.orElse(null);

该代码获取第一个集合的第一个元素,如果第一个集合为空,则获取null。要获取第一个非空集合的第一个元素,可以使用flatMap:

wrapper.getUnits().stream()
.map(Unit::getUnitLines)
.flatMap(Collection::stream)
.findFirst()