Reputation: 7368
Here is my code to find the unique number and print the squares of it. How can I convert this code to java8 as it will be better to stream 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));
}
Upvotes: 2
Views: 12205
Reputation: 7368
As @Holger comments, in above answers System.out.println
looks most expensive operation.
May be we can do it in more faster way like:
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"))
);
Upvotes: 0
Reputation: 16053
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);
Upvotes: 1
Reputation: 56453
Use IntStream.of
with distinct
and forEach
:
IntStream.of(3, 2, 2, 3, 7, 3, 5)
.distinct()
.forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));
or if you want the source to remain as a List<Integer>
then you can do as follows:
numbers.stream()
.distinct()
.forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));
yet another variant:
new HashSet<>(numbers).forEach(n -> System.out.println(n + "\t" +(int)Math.pow(n, 2)));
Upvotes: 3