简体   繁体   English

Java 将 for 循环转换为 lambda 表达式 [暂停]

[英]Java convert for loop into lambda expression [on hold]

I want to convert the below code into lamda expession, especially the FOR LOOP marked in bold, starting from 1st index and skipping the next index[i=i+2]我想将下面的代码转换为lamda expession,特别是用粗体标记的FOR LOOP,从第一个索引开始并跳过下一个索引[i=i+2]

public static List<Integer>  integerArrayList = Arrays.asList(0, 1, 2, 3, 4, 5, 6);

  Thread oddThread8 = new Thread(() -> {
  List<Integer> integerArrayList = ReadList8Refctor.getIntegerList();
  int listSize = integerArrayList.size();

  for(int i=1; i<listSize; i=i+2) {
       System.out.println(Thread.currentThread().getName()+" - "+integerArrayList.get(i));
     }

}, "ODD");

I get perfect output, help me to refactor the FOR LOOP, Thanks in Advance我得到了完美的 output,帮我重构 FOR LOOP,在此先感谢

ODD - 1
ODD - 3
ODD - 5
EVEN - 0
EVEN - 2
EVEN - 4
EVEN - 6

If you are using java-9 you can use:-如果您使用的是 java-9,您可以使用:-

 IntStream.iterate(1,i -> i < listSize ,i ->i+2).forEach(i -> Thread.currentThread().getName()+" - "+integerArrayList.get(i));

On java-8:-在 java-8 上:-

 IntStream.range(1,listSize).filter(value -> value%2!=0).forEach(i -> Thread.currentThread().getName()+" - "+integerArrayList.get(i));

On java-8 you can do it by using IntStream.range()在 java-8 上,您可以使用IntStream.range()

IntStream.range(1, listSize)
         .filter(i->i%2!=0)
         .forEach(i->System.out.println(Thread.currentThread().getName()+" - "+integerArrayList.get(i)));

From java-9 you can limit the result in iterate itself从 java-9 开始,您可以将结果限制为iterate本身

IntStream.iterate(1, i->i<listSize,i->i+2)
         .forEach(i->System.out.println(Thread.currentThread().getName()+" - "+integerArrayList.get(i)));

Or by using stream.iterate from java-9或者通过使用来自 java-9 的stream.iterate

Stream.iterate(1, i->i<listSize,i->i+2)
       .forEach(i->System.out.println(Thread.currentThread().getName()+" - "+integerArrayList.get(i)));

You can also do it with foreach:你也可以用 foreach 来做:

    integerArrayList.stream().forEach(e->{
        if(e%2 != 0){
            System.out.println(Thread.currentThread().getName()+" - "+integerArrayList.get(e));
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM