package spoon.test.methodreference.testclasses;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.function.Supplier;
public class Foo {
private final List<Person> roster;
private final Person[] rosterAsArray;
private final Phone[] rosterPhoneAsArray = new Phone[10];
public Foo() {
roster = new ArrayList<>();
rosterAsArray = roster.toArray(new Person[roster.size()]);
}
public void m() {
Arrays.sort(rosterAsArray, Person::compareByAge);
}
public void m0() {
final Person tarzan = new Person("Tarzan", 18, new Phone("0681273948"));
Arrays.sort(rosterPhoneAsArray, tarzan.phone::compareByNumbers);
}
public void m1() {
ComparisonProvider myComparisonProvider = new ComparisonProvider();
Arrays.sort(rosterAsArray, myComparisonProvider::compareByName);
}
public void m2() {
String[] stringArray = { "Barbara", "James", "Mary", "John",
"Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
}
public void m3() {
transferElements(roster, HashSet<Person>::new);
}
public void m4() {
personFactory(Person::new);
}
public void m5() {
typeFactory(Type<String>::new);
}
class ComparisonProvider {
public int compareByName(Person a, Person b) {
return a.name.compareTo(b.name);
}
public int compareByAge(Person a, Person b) {
return a.age - b.age;
}
}
public static final class Person {
public final String name;
public final int age;
public final Phone phone;
public Person() {
name = "";
age = 0;
phone = null;
}
public Person(String name, int age, Phone phone) {
this.name = name;
this.age = age;
this.phone = phone;
}
public static int compareByAge(Person a, Person b) {
return a.age - b.age;
}
}
public class Type<T> {
}
public static final class Phone {
public final String numbers;
public Phone(String numbers) {
this.numbers = numbers;
}
public int compareByNumbers(Phone a, Phone b) {
return a.numbers.compareTo(b.numbers);
}
}
public static <T, SOURCE extends Collection<T>, DEST extends Collection<T>>
DEST transferElements(
SOURCE sourceCollection,
Supplier<DEST> collectionFactory) {
DEST result = collectionFactory.get();
for (T t : sourceCollection) {
result.add(t);
}
return result;
}
public static void personFactory(Supplier<Person> personFactory) {
}
public static void typeFactory(Supplier<Type> typeFactory) {
}
}