I try to convert some for each loops to streams.
I have following object relations:
- the main object is a collection of
sensors
- each
sensor
hascommands
andattributes
objects - each
command
object hasmembers
objects - each
attribute
object hasfields
objects
5 Loops
List<SensorDTO> sensorDTOS = new ArrayList();
// Loop 1
for (Sensor sensor: sensors) {
Set<CommandDTO> commandSet = new HashSet<>();
// Loop 2
for (Command c : sensor.getCommands()) {
Set<MemberDTO> memberSet = new HashSet<>();
// Loop 3
for (Member m : c.getMembers()) {
memberSet.add(new MemberDTO(m.getName()));
}
commandSet.add(new CommandDTO(c.getName(),memberSet));
}
Set<AttributeDTO> attributeSet = new HashSet<>();
// Loop 4
for (Attribute a : sensor.getAttributes()) {
Set<FieldDTO> fieldSet = new HashSet<>();
// Loop 5
for (Field f : a.getFields()) {
fieldSet.add(new FieldDTO(f.getName()));
}
attributeSet.add(new AttributeDTO( a.getName(), fieldSet));
}
SensorDTO sensorDTO = new SensorDTO(attributeSet, commandSet);
sensorDTOS.add(sensorDTO);
}
Attempt using stream().forEach
The only I have accomplished is to print the inner object.
sensors.stream()
.forEach(s-> {
s.getCommands().stream().forEach( c -> {
c.getMembers().stream().forEach( m -> {
System.out.println(m);
});
});
});
How to make a list of sensors
to return as a list of sensorDTOS
?