1

这是我查找唯一编号并打印其正方形的代码。如何将此代码转换为 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));
}
4

3 回答 3

2

IntStream.ofdistinct和一起使用forEach

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

或者如果您希望源保持为 aList<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)));
于 2018-07-20T17:42:29.153 回答
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);
于 2018-07-20T18:03:00.570 回答
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")) 
                   );
于 2018-07-23T00:44:30.557 回答