Скажем, у меня есть список, содержащий компоненты, подобные следующим:
[
{
"id": 1,
"name": "Displacement",
"value": 200
},
{
"id": 2,
"name":"Time",
"value": 120
},
{
"id":3,
"name":"Mass",
"value": 233
},
{
"id":4,
"name": "Acceleration",
"value": 9.81
},
{
"id": 5,
"name":"Speed of Light",
"value": 300000000
}
]
Каждый компонент является объектом следующего класса:
class Component {
Integer id;
String name;
Long value;
// necessary getters and setters
}
Мне нужно получить следующие показатели извышеприведенный список: Velocity (Displacement/Time)
, Force (Mass * Acceleration)
и Energy (Mass * Speed of Light^2)
Что больше всего из этого получается? Я мог бы вывести список и отфильтровать необходимые компоненты следующим образом:
Double calculateVelocity() {
Component displacement = list.stream().filter(c -> c.getName().equals("Displacement")).findFirst().orElseThrow(//throw err);
Component time = list.stream().filter(c -> c.getName().equals("Time")).findFirst().orElseThrow(//throw err);
return displacement.value / time.value;
} // repeat for other metrics
Это было бы утомительно, так как в окончательной реализации было бы гораздо больше метрик, которые можно было бы рассчитать одновременно. Есть ли лучший способ?
Спасибо