【问题标题】:How to print Unique Squares Of Numbers In Java 8?如何在 Java 8 中打印唯一的数字平方?
【发布时间】:2018-12-29 01:38:14
【问题描述】:

这是我找到唯一数字并打印它的正方形的代码。如何将此代码转换为 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));
}

【问题讨论】:

    标签: java list java-8 unique perfect-square


    【解决方案1】:

    IntStream.ofdistinctforEach 一起使用:

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

    或者如果您希望源保持为List&lt;Integer&gt;,那么您可以执行以下操作:

    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 和第 3 中,哪一个会有效?
    • @NullPointer 我想说第 3 种变体比第 2 种更有效,因为它没有流开销。
    • 如果System.out.println 是最昂贵的操作,请不要感到惊讶,因此System.out.println( numbers.stream() .distinct() .map(n -&gt; n+"\t"+n*n) .collect(Collectors.joining("\n")) ); 更快。但是,只有基准可以说明。
    【解决方案2】:
    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】:

      作为@Holger cmets,在上述答案中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")) 
                         );
      

      【讨论】:

        猜你喜欢
        • 2017-04-15
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多