NullPointer
NullPointer

Reputation: 7368

How to print Unique Squares Of Numbers In Java 8?

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

Answers (3)

NullPointer
NullPointer

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

Pankaj Singhal
Pankaj Singhal

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

Ousmane D.
Ousmane D.

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

Related Questions