package com.shekhargulati.ninetynine_problems._01_lists; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.stream.Collectors; /** * (**) Extract a given number of randomly selected elements from a list */ public class P23 { public static <T> List<T> randomSelect(List<T> list, int n) { return new Random().ints(n, 0, list.size()).mapToObj(list::get).collect(Collectors.toList()); } public static <T> List<T> randomSelectR(List<T> list, int n) { if (n == 0) { return Collections.emptyList(); } Object[] objects = P20.removeAt0(list, new Random().nextInt(list.size())); List<T> remaining = (List<T>) objects[0]; T t = (T) objects[1]; List<T> result = new ArrayList<>(); result.add(t); result.addAll(randomSelectR(remaining, n - 1)); return result; } public static <T> List<T> randomSelect_imperative(List<T> list, int n) { List<T> result = new ArrayList<>(); Random random = new Random(); List<T> remaining = list; while (result.size() < n) { Object[] objects = P20.removeAt0(remaining, random.nextInt(remaining.size())); remaining = (List<T>) objects[0]; T t = (T) objects[1]; result.add(t); } return result; } }