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<Integer> gerFirstTriangles() { return flatMap(() -> flatMap(() -> map(z -> 1))).collect(Collectors.toList()); } abstract <R> R flatMap(Supplier<R> mapper); abstract <R> Stream<R> map(Function<Integer, R> mapper); } class PythagoreanTriangles { static class Triplet<T,U,R>{ 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<Integer> numbers = IntStream.rangeClosed(1,num).boxed(); Stream<Triplet<Integer, Integer, Integer>> 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<Integer, Integer, Integer>(x, y, z1)); }); }); triangles.forEach(System.out::println); } public List<Triplet<Integer, Integer, Integer>> gerFirstTriangles(long num){ Stream<Integer> 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<Integer, Integer, Integer>(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); } }