如何在 Java 8 中打印唯一的数字平方?

How to print Unique Squares Of Numbers In Java 8?

这是我的代码,用于查找唯一数字并打印它的方块。我如何将此代码转换为 java8,因为流式传输 API 会更好?

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
HashSet<Integer> uniqueValues = new HashSet<>(numbers);

for (Integer value : uniqueValues) {
    System.out.println(value + "\t" + (int)Math.pow(value, 2));
}

IntStream.ofdistinctforEach 一起使用:

IntStream.of(3, 2, 2, 3, 7, 3, 5)
         .distinct()
         .forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));

或者如果您希望源保留为 List<Integer>,那么您可以执行以下操作:

numbers.stream()
       .distinct()
       .forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));

又一个变体:

new HashSet<>(numbers).forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
numbers.stream()
    .distinct()
    .map(n -> String.join("\t",n.toString(),String.valueOf(Math.pow(n, 2))))
    .forEach(System.out::println);

正如@Holger 评论的那样,在上面的答案中 System.out.println 看起来是最昂贵的操作。

也许我们可以用更快的方式来做,比如:

 List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
 System.out.println( numbers.stream()
                     .distinct()
                     .map(n -> n+"\t"+n*n) 
                     .collect(Collectors.joining("\n")) 
                   );