Я использую gson для сериализации/десериализации и потока java 8. Ниже приведен фрагмент кода,Есть ли способ сделать следующий код более общим?
private long sumofTime() {
Line[] lines = gson.fromJson(jsonString, Line[].class);
return Arrays.stream(lines).filter(x -> x.hasTime())
.mapToInt(x -> x.getTime).sum();
}
класса Line выглядит,
public class Line {
String name;
String stamp;
Integer time;
Integer xx;
Integer yy;
Integer zz;
...
...
boolean hasTotalTime() {
return totalTime != null;
}
...
getters...setters...}
потока используется для проверки, если конкретные переменные (eg.time в приведенном выше примере) не является нулевой для каждого элемента массива (т.е. Line), а затем получить сумму всех раз.
Вопрос: В объектах линии есть сумма, равная 30 переменным, сумма которых необходима, поэтому как сделать решение более общим, вместо того, чтобы писать метод суммы для каждой переменной. Обратите внимание, что для обработки более 1000 объектов Line, поэтому я подумал, что Stream будет лучше.
, пожалуйста, оставьте комментарий для получения дополнительной информации, а не downvoting. – user3366706
Во-первых, используйте ссылки на методы - это несколько чище. Что еще более важно, просто попросите какую-то функцию «extract extract» как входной сигнал к вашему методу. Затем примените эту функцию к своим объектам. Затем вы можете легко передать в методе ссылку на геттер в качестве входных данных для вашего метода суммирования. –
* Что-то нужно знать, какие переменные (xx, yy, zz ..) подытожить и либо получить значения в последовательности для суммирования или выполнения самой суммы и вернуть результат. Недостаточно отражения и эвристики/аннотаций, которые приведет к дополнительному сложному коду - нет способа сделать его «более общим», и попытка сделать это - это борьба с статической типизацией времени компиляции. – user2864740