代码之家  ›  专栏  ›  技术社区  ›  NullPointer

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

  •  1
  • NullPointer  · 技术社区  · 6 年前

    这是我的代码,可以找到唯一的数字并打印出它的方块。如何将此代码转换为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 回复  |  直到 6 年前
        1
  •  2
  •   Ousmane D.    6 年前

    使用 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)));
    
        2
  •  1
  •   Pankaj Singhal    6 年前
    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);
    
        3
  •  0
  •   NullPointer    6 年前

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