【问题标题】:Integer array iteration in java 8 [duplicate]java 8中的整数数组迭代[重复]
【发布时间】:2020-08-09 11:36:39
【问题描述】:

如何遍历数组中的特定范围并使用 java 8 流执行验证或操作

例如:

for(int i= startIndex; i< endIndex;i++) {
    total+=arr[i];
}

boolean emptyArray = true;
for(int i= startIndex; i< endIndex;i++) {
   if(array[i] != 0) {
       emptyArray = false;
   }
}

【问题讨论】:

  • @Deadpool OP 正在寻找所示代码的 Java 8 Stream 版本。
  • 是的......这就是我想要的......我试过IntStream.range但没有用
  • @Deadpool 两者都在处理数组的部分。你读过问题中的一句话吗? “如何遍历数组中的特定范围并执行验证或操作使用java 8流
  • 在这种特定情况下,计算total&gt; 0 可用于得出数组不为空。所以一次迭代就足够了。

标签: java java-stream


【解决方案1】:

你也可以使用IntStream.range(startInclusive, endExclusive) 来迭代一个数组:

 int arr[] = new int[] { 1, 2, 0, 5, 6, 7};

 int sum = IntStream.range(0, 3).map(i -> arr[i]).sum();

 boolean emptyArray = !IntStream.range(0, 3).anyMatch(i -> arr[i] != 0);
 System.out.println(emptyArray);
 emptyArray = IntStream.range(2, 2).allMatch(i -> arr[i] == 0);
 System.out.println(emptyArray);

anyMatch(predicate) 搜索与predicate 匹配的第一个项目,如果所有项目都与predicate 匹配,则allMatch(predicate) 返回true

【讨论】:

    【解决方案2】:

    您可以使用skip()limit()Stream

    Stream<Integer> s = Stream.of(1, 2, 3, 4, 5);
    List<Integer> slice = s.skip(1).limit(2)
          .collect(Collectors.toList()));
    System.out.println(slice); // prints [2, 3]
    

    翻译你的第一个例子:

    Integer[] array = {1, 2, 3, 4, 5};
    
    int startIndex = 1;
    int endIndex = 3;
    int total = Arrays.stream(array)
            .skip(startIndex)
            .limit(endIndex - startIndex /*assuming endIndex is always > startIndex */)
            .mapToInt(Integer::intValue)
            .sum();
    System.out.println(total); // prints 5
    

    【讨论】:

    • 赞成,但为了获得更好的答案,您应该在问题中包含两个 sn-ps 代码的流版本,即第一个使用 sum(),第二个使用其中一个xxxMatch() 方法。
    • 这是 Java8 代码吗...在我看来像 java11
    • @user3310115 你指的是Java 10中添加的var
    • @user3310115 是的,但我进行了编辑以显示实际类型 - 但对于问题而言,这并不重要,因为答案是关于显示 skiplimit 的使用情况。
    • @Stuck - 我在寻找一个特定的范围。那可能吗?在我的问题中,我有确切的 startIndexendIndex 与 em
    【解决方案3】:
    int[] arr = new int[] {15, 1, 2, 3, 7, 9, 10};
    int startIndex = 1;
    int endIndex = 4;
    int sum = Arrays.stream(arr, startIndex, endIndex)
             .sum();
    System.out.println(sum);
    

    输出:

    6
    

    startIndex 是包容性的,endIndex 是独占性的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2017-06-12
      • 2018-02-24
      • 2014-07-26
      • 2021-10-01
      • 2022-01-20
      相关资源
      最近更新 更多