package de.wwwu.awolf.presenter.util;

import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
 *
 * @Author: Armin Wolf
 * @Email: a_wolf28@uni-muenster.de
 * @Date: 26.06.2017.
 */
public class RandomSampler {

    private static SecureRandom random = new SecureRandom(); // Compliant for security-sensitive use cases

    private RandomSampler() {
        super();
    }

    /**
     * Diese Methode liefert eine <code>r</code> Elementige zufällige Stichprobe an Geraden.
     *
     * @param set Die gesammtmenge der Geraden aus denen gewählt werden soll
     * @param r   Anzahl der zu wählenden Geraden
     * @return <code>r</code> Elementige zufällige Stichprobe an Geraden
     */
    public static <T extends Object> List<T> run(List<T> set, Double r) {
        if (set.isEmpty()) {
            return Collections.emptyList();
        } else {
            int index = 0;
            List<T> sampled = new ArrayList<>();
            for (int i = 0; i < r; i++) {
                index = random.nextInt(set.size());
                sampled.add(set.get(index));
            }
            return sampled;
        }
    }

}
