首页 > 解决方案 > 将 For 表达式更改为 lambda Java 8

问题描述

我想将此表达式从这个 for 循环更改为使用 java 8 的 lambda 表达式,并且我想返回数组中与该值匹配的数字位置。

String[] values= {"VALUE1", "VALUE2", "VALUE3"};

int stringIndex;
for(stringIndex = 0; stringIndex < values.length; stringIndex++)
    if(stringWithValue.contains(values[stringIndex])) break;

例如,

stringWithValue = "SomeOtherThingVALUE1"应该返回0等其他值。

标签: javaarrayslambdajava-8

解决方案


可能是这样的?

老实说,我不确定它是否比您的循环更好。

import java.util.stream.*;

public class LambdaDemo {
    public static void main(String[] args) {
        String stringWithValue = "xxxxxxxVALUE2xxxxxxx";
        String[] values= {"VALUE1", "VALUE2", "VALUE3"};

        int stringIndex = IntStream
                .range(0, values.length)
                .filter(i -> stringWithValue.contains(values[i]))
                .findFirst()
                .orElseGet(() -> -1);
        
        System.out.println(stringIndex);
    }
}

推荐阅读