如何用Java Stream按索引对比两个等长字符串数组实现包含校验
基于Stream API的实现方案
你可以通过IntStream生成索引流配合allMatch方法实现,该写法和原for循环的短路逻辑一致,遇到不匹配项会立即终止遍历,性能和原有实现完全相同,写法更简洁:
import java.util.Arrays; import java.util.List; import java.util.stream.IntStream; public class MatchTest { public static void main(String[] args) { List<String> mainArray = Arrays.asList("Red book", "Yellow bird", "Green sky"); List<String> subArray = Arrays.asList("Red", "Yellow", "Green"); // 可选:提前校验两个列表长度是否一致,避免索引越界 if (mainArray.size() != subArray.size()) { System.out.println(false); return; } boolean result = IntStream.range(0, mainArray.size()) .allMatch(i -> mainArray.get(i).contains(subArray.get(i))); System.out.println(result); // 输出true } }
逻辑说明
IntStream.range(0, mainArray.size())会生成从0到列表长度减1的连续整数,对应两个列表的所有索引位置allMatch方法用于校验流中所有元素是否都满足给定条件,只要有一个索引位置的元素不满足包含关系,就会立即停止遍历返回false,等效于原代码中的break逻辑- 所有位置都满足条件时最终返回true
内容的提问来源于stack exchange,提问作者magicmushroom
相关产品推荐
相关产品推荐

