Java:实体上嵌套列表的简单访问<Object>



我有一个实体,它有多个嵌套列表,如下所示:

public class DataFile  {
@Id
private int id;
private List<DataObject> datas = new ArrayList<>();
}
public class DataObject {
@Id
private String type;
private List<DataValue> values = new ArrayList<>();
}

public class DataValue  {
@Id
private int id;
private String dataValue;
private LocalDateTime dataDate = LocalDateTime.now();
}

如果我想要一个DataObject.type="speType"和dataValue.id=2的特定dataValue,我需要这个:

String value = dataFile.getDatas().forEach(t -> {
if(t.getType().equals("speType")){
t.getValues().forEach(v -> {
if(v.getId(2))
return v.getDataValue();
});
}
});

有可能创建一个简单的方法吗?

感谢

对于纯"流"解决方案:

dataFile.getDatas()
.stream()
.filter(t -> t.getType().equals("speType"))
.flatMap(t -> t.getValues().stream())
.filter(v -> v.getId()==2)
.map(DataValue::getDataValue)
.findFirst();

我假设"if(v.getId(2(("的意思是"if(v.getId((==2(",如果不是,你可以很容易地更改上面的代码。

你可以试试这样的东西:

Optional<String> optValue =
dataFile.getDatas()
.stream()
.filter(t -> t.getType().equals("specType"))
.flatMap(t -> t.getValues().stream()
.filter(v -> v.getId() == 2)
.map(DataValue::getDataValue)
)
.findFirst();

CCD_ 1允许在处理的一个元素与条件匹配时尽早退出处理。类似于您在实际代码中所做的操作。

注意,Stream.findFirst()返回一个Optional。在终端操作后打开对象,例如:

String value = optValue.orElse("default value");

或者在这个流中执行:

String value = 
...
.findFirst();
.orElse("defaultValue")

最新更新