这是我的代码,用于查找唯一编号并打印其平方。如何将这段代码转换为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));
}
答案 0 :(得分:2)
将IntStream.of
与distinct
和forEach
一起使用:
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"))
);