Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个值的流foreach?_Java_Foreach_Java Stream - Fatal编程技术网

Java 具有多个值的流foreach?

Java 具有多个值的流foreach?,java,foreach,java-stream,Java,Foreach,Java Stream,我有一个包含偶数元素的ArrayList。如何使用Stream.forEach一次解析2个值 x.forEach((a, b) -> System.out.println(a.toString() + "-" + b.toString()); 这不起作用。这会起作用: IntStream.range(0, list.size() - 1) .filter(i -> i % 2 == 0) .forEach(i -> System.out.println(list.get(i)

我有一个包含偶数元素的
ArrayList
。如何使用
Stream.forEach
一次解析2个值

x.forEach((a, b) -> System.out.println(a.toString() + "-" + b.toString());

这不起作用。

这会起作用:

IntStream.range(0, list.size() - 1)
.filter(i -> i % 2 == 0)
.forEach(i -> System.out.println(list.get(i) + "-" + list.get(i + 1)));
它将从列表[1,2,3,4,5,6]生成以下输出:

1-2
3-4
5-6

这将实现以下目的:

IntStream.range(0, list.size() - 1)
.filter(i -> i % 2 == 0)
.forEach(i -> System.out.println(list.get(i) + "-" + list.get(i + 1)));
它将从列表[1,2,3,4,5,6]生成以下输出:

1-2
3-4
5-6

您可以将以下帮助器方法添加到项目的某些实用程序类中:

public static <T> void forPairs(List<T> list, BiConsumer<T, T> action) {
    IntStream.range(0, list.size()/2)
             .forEach(i -> action.accept(list.get(i*2), list.get(i*2+1)));
}
publicstaticvoidforpairs(列表、双消费者操作){
IntStream.range(0,list.size()/2)
.forEach(i->action.accept(list.get(i*2),list.get(i*2+1));
}
然后像这样使用它:

List<Integer> list = Arrays.asList(1, 3, 5, 2, 1, 6);
forPairs(list, (a, b) -> System.out.println(a + "-" + b));
List List=Arrays.asList(1,3,5,2,1,6);
forPairs(list,(a,b)->System.out.println(a+“-”+b));

您可以将以下帮助器方法添加到项目的某些实用程序类中:

public static <T> void forPairs(List<T> list, BiConsumer<T, T> action) {
    IntStream.range(0, list.size()/2)
             .forEach(i -> action.accept(list.get(i*2), list.get(i*2+1)));
}
publicstaticvoidforpairs(列表、双消费者操作){
IntStream.range(0,list.size()/2)
.forEach(i->action.accept(list.get(i*2),list.get(i*2+1));
}
然后像这样使用它:

List<Integer> list = Arrays.asList(1, 3, 5, 2, 1, 6);
forPairs(list, (a, b) -> System.out.println(a + "-" + b));
List List=Arrays.asList(1,3,5,2,1,6);
forPairs(list,(a,b)->System.out.println(a+“-”+b));

如果为了使用流而使用流,您可以:

  • 编写一个非常困难的自定义收集器来收集对,然后重新流化这些对并执行您的操作,或者
  • 迭代索引而不是元素,这里提供了答案(但它不是您感兴趣的对象流)
  • 这里的问题是,流是为无状态管道操作设计的,没有副作用,而不是用于组合元素(除了一些例外)。这些文件相当详尽

    使用here更合适:

    Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5, 6).iterator();
    while(iterator.hasNext()) {
        System.out.println(iterator.next().toString() + "-" + iterator.next().toString());
    }
    
    Iterator Iterator=Arrays.asList(1,2,3,4,5,6).Iterator();
    while(iterator.hasNext()){
    System.out.println(iterator.next().toString()+“-”+iterator.next().toString());
    }
    

    注意:如果列表大小为奇数,则会抛出
    NoSuchElementException
    。如果需要,可以轻松编写防御检查。

    如果为了使用流而使用流,可以:

  • 编写一个非常困难的自定义收集器来收集对,然后重新流化这些对并执行您的操作,或者
  • 迭代索引而不是元素,这里提供了答案(但它不是您感兴趣的对象流)
  • 这里的问题是,流是为无状态管道操作设计的,没有副作用,而不是用于组合元素(除了一些例外)。这些文件相当详尽

    使用here更合适:

    Iterator<Integer> iterator = Arrays.asList(1, 2, 3, 4, 5, 6).iterator();
    while(iterator.hasNext()) {
        System.out.println(iterator.next().toString() + "-" + iterator.next().toString());
    }
    
    Iterator Iterator=Arrays.asList(1,2,3,4,5,6).Iterator();
    while(iterator.hasNext()){
    System.out.println(iterator.next().toString()+“-”+iterator.next().toString());
    }
    

    注意:如果列表大小为奇数,则会抛出
    NoSuchElementException
    。如果需要,可以很容易地编写防御检查。

    整数值,如:1、2、3、4、5、6。你看了吗?@BorisvanKatwijk,这个问题是无关的:使用了重叠对。在这里,我假设OP想要使用非重叠对。整数值,比如:1,2,3,4,5,6你看了吗?@BorisvanKatwijk,这个问题是无关的:使用了重叠对。这里,我假设OP想要使用非重叠对。