Careeroza
Constructor References
ClassName::new
ClassName::new picks the constructor that matches the functional interface: Supplier → no-arg constructor, Function → one-arg, BiFunction → two-arg. Arrays work too: int[]::new, String[]::new.
Example
Turning raw strings into objects and collecting into an array.
import java.util.*;
import java.util.function.*;
public class Main {
public static void main(String[] args) {
Function<String, Student> byName = Student::new;
BiFunction<String, Integer, Student> byNameAndMarks = Student::new;
List<Student> students = List.of("Asha", "Kiran").stream().map(byName).toList();
System.out.println(students);
System.out.println(byNameAndMarks.apply("Meera", 91));
String[] upper = List.of("pune", "goa").stream().map(String::toUpperCase).toArray(String[]::new);
System.out.println(Arrays.toString(upper) + " length=" + upper.length);
Supplier<Map<String, Integer>> mapFactory = TreeMap::new;
Map<String, Integer> m = mapFactory.get();
m.put("b", 2); m.put("a", 1);
System.out.println(m);
}
}
class Student {
private final String name;
private final int marks;
Student(String name) { this(name, 0); }
Student(String name, int marks) { this.name = name; this.marks = marks; }
public String toString() { return name + "(" + marks + ")"; }
}Output
[Asha(0), Kiran(0)]
Meera(91)
[PUNE, GOA] length=2
{a=1, b=2}