import java.util.List; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; abstract class Simplified { public List gerFirstTriangles() { return flatMap(() -> flatMap(() -> map(z -> 1))).collect(Collectors.toList()); } abstract R flatMap(Supplier mapper); abstract Stream map(Function mapper); } class PythagoreanTriangles { static class Triplet{ private T t; private U u; private R r; public Triplet(T t, U u, R r){ this.t = t; this.u = u; this.r = r; } @Override public String toString() { return t.toString() + "," + u.toString() + "," + r.toString(); } } public void pythagoreanTriangles(Integer num){ Stream numbers = IntStream.rangeClosed(1,num).boxed(); Stream> triangles = numbers.flatMap(x -> { return IntStream.rangeClosed(1, x).boxed().flatMap(y -> { return IntStream.rangeClosed(1, y).boxed().filter(z -> { return x * x == y * y + z * z; }).map(z1 -> new Triplet(x, y, z1)); }); }); triangles.forEach(System.out::println); } public List> gerFirstTriangles(long num){ Stream infinity = Stream.iterate(1, (n) -> n + 1); return infinity.flatMap(x -> { return IntStream.rangeClosed(1, x).boxed().flatMap(y -> { return IntStream.rangeClosed(1, y).boxed().filter(z -> { return x * x == y * y + z * z; }).map(z1 -> new Triplet(x, y, z1)); }); }).limit(num).collect(Collectors.toList()); } public static void main(String[] args) { PythagoreanTriangles triangles = new PythagoreanTriangles(); triangles.pythagoreanTriangles(10); triangles.gerFirstTriangles(5l).forEach(System.out::println); } }