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

时间:2018-07-20 17:29:27

标签: java list java-8 unique perfect-square

这是我的代码,用于查找唯一编号并打印其平方。如何将这段代码转换为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));
}

3 个答案:

答案 0 :(得分: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)));

答案 1 :(得分:1)

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);

答案 2 :(得分:0)

在@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")) 
                   );