package com.ewjordan.util; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class ArrayUtil { /** * Print an array of doubles * @param arr */ static public void printArray(double[] arr) { for (int i=0; i<arr.length; ++i) { System.out.println(i + " : " + arr[i]); } } static public List<Double> toDoubleList(int[] intarr) { ArrayList<Double> doubles = new ArrayList<Double>(); for (int i=0; i<intarr.length; ++i) { doubles.add((double)intarr[i]); } return doubles; } static public double[] toDoubleArray(List<? extends Number> list) { double[] arr = new double[list.size()]; for (int i=0; i<list.size(); ++i) { arr[i] = list.get(i).doubleValue(); } return arr; } static public double[] toDoubleArray(DoubleList list) { double[] arr = new double[list.size()]; for (int i=0; i<list.size(); ++i) { arr[i] = (double)list.get(i); } return arr; } static public double average(double[] arr) { return sum(arr) / arr.length; } static public double sum(double[] arr) { double sum = 0; for (double d : arr) { sum += d; } return sum; } static public double min(double[] arr) { double min = Double.MAX_VALUE; for (double d : arr) { if (d < min) min = d; } return min; } static public double max(double[] arr) { double max = -Double.MAX_VALUE; for (double d : arr) { if (d > max) max = d; } return max; } static public StoredObservationSummary storedSummary(double[] arr) { StoredObservationSummary summ = new StoredObservationSummary(); summ.add(arr); return summ; } static public StoredObservationSummary fieldToStoredSummary(String doubleFieldName, List<? extends Object> objects) { return storedSummary(fieldToDoubleArray(doubleFieldName,objects)); } static public StoredObservationSummary fieldToStoredSummary(String doubleFieldName, Object[] objects) { return storedSummary(fieldToDoubleArray(doubleFieldName,objects)); } static public double[] fieldToDoubleArray(String doubleFieldName, List<? extends Object> objects) { Class<?> clazz = objects.get(0).getClass(); double[] arr = new double[objects.size()]; try { Field field = clazz.getDeclaredField(doubleFieldName); field.setAccessible(true); for (int i=0; i<objects.size(); ++i) { arr[i] = field.getDouble(objects.get(i)); } } catch (NoSuchFieldException e) { Method m; try { m = clazz.getDeclaredMethod(doubleFieldName); m.setAccessible(true); for (int i=0; i<objects.size(); ++i) { arr[i] = (Double) m.invoke(objects.get(i)); } } catch (Exception e1) { e.printStackTrace(); throw new RuntimeException(e1); } } catch (Exception e) { throw new RuntimeException(e); } return arr; } static public double[] fieldToDoubleArray(String doubleFieldName, Object[] objects) { Class<?> clazz = objects[0].getClass(); double[] arr = new double[objects.length]; try { Field field = clazz.getDeclaredField(doubleFieldName); field.setAccessible(true); for (int i=0; i<objects.length; ++i) { arr[i] = field.getDouble(objects[i]); } } catch (NoSuchFieldException e) { Method m; try { m = clazz.getDeclaredMethod(doubleFieldName); m.setAccessible(true); for (int i=0; i<objects.length; ++i) { arr[i] = (Double) m.invoke(objects[i]); } } catch (Exception e1) { e.printStackTrace(); throw new RuntimeException(e1); } } catch (Exception e) { throw new RuntimeException(e); } return arr; } }