package xmp_map_dynamic;

import java.util.Arrays;
import java.util.function.Function;

public class Mapper {
	
	public double[] map(double[] array, Function<Double, Double> fn) {
		double[] temp = null;
		if(array != null) {
			temp = new double[array.length];
			for(int i = 0; i < array.length; i++) {
				temp[i] = fn.apply(array[i]);
			}
		}
		return temp;
	}
	
	Function<Double, Double> square = 
		new Function<Double, Double>() {
			@Override
			public Double apply(Double t) {	return t*t; }
		};

	public static double sqr(double d) { return d*d; }



	public static void main(String[] args) {
		Mapper test = new Mapper();
		double[] data = {1,2,3,4}; 
		double[] sq1 = test.map(data, test.square);
		double[] sq2 = test.map(data, Mapper::sqr); // Note ::
		double[] sq3 = test.map(data, Math::sqrt); // sqrt in Java lib
		double[] sq4 = test.map(data, d -> d*d); // lambda

		System.out.println("data: " + Arrays.toString(data));
		System.out.println("sq2: " + Arrays.toString(sq2));
	}

}
