Java 同时遍历2个列表
我正在尝试将下面的代码转换为Java8(使用streams),但不确定如何使用streams一起迭代两个列表Java 同时遍历2个列表,java,for-loop,java-8,iterator,java-stream,Java,For Loop,Java 8,Iterator,Java Stream,我正在尝试将下面的代码转换为Java8(使用streams),但不确定如何使用streams一起迭代两个列表 public class ComparisonString { private static List<String> input; public static void main(String[] args) { input = Arrays.asList("TRUE","FALSE","T
public class ComparisonString {
private static List<String> input;
public static void main(String[] args) {
input = Arrays.asList("TRUE","FALSE","TRUE","N/A");
ComparisonString cs = new ComparisonString();
System.out.println(cs.getMatchedOutput(Arrays.asList("TRUE","N/A","N/A","FALSE")));
}
/**
* Check whether the 'input' List and the 'givenInput' List match.
* If a value is "N/A" in either lists then it means does-not-matter/don't-check-for-a-match-and-go-next
* @param givenInput
* @return
*/
public Optional<String> getMatchedOutput(final List<String> givenInput) {
boolean flag = true;
for (int i = 0; i < givenInput.size(); i++) {
if (this.input.get(i) != null
&& !(this.input.get(i).equalsIgnoreCase("N/A")
|| givenInput.get(i).equalsIgnoreCase("N/A"))
&& !this.input.get(i).equalsIgnoreCase(givenInput.get(i))) {
flag = false;
break;
}
}
if (flag) {
return Optional.of("flag = true");
} else {
return Optional.empty();
}
}
}
公共类比较安装{
私有静态列表输入;
公共静态void main(字符串[]args){
输入=数组.asList(“真”、“假”、“真”、“不适用”);
ComparisonString cs=新的ComparisonString();
System.out.println(cs.getMatchedOutput(Arrays.asList(“TRUE”、“N/A”、“N/A”、“FALSE”));
}
/**
*检查“输入”列表和“给定输入”列表是否匹配。
*如果任一列表中的值为“N/a”,则表示无所谓/不检查匹配和下一步
*@param givinput
*@返回
*/
公共可选getMatchedOutput(最终列表给定输入){
布尔标志=真;
for(int i=0;i
很遗憾,您不能使用流同时处理两个列表。您可以做的是使用迭代器。我试着写了一些代码,应该是这样的:
publicstaticvoidstreamtest(列表给定列表){
列表测试=新建ArrayList();
IntStream.range(0,givenList.size())
.parallel()
.forEach(i->{
if(input.get(i)!=null
&&!(input.get(i).equalsIgnoreCase(“N/A”)
||givenList.get(i).equalsIgnoreCase(“不适用”)
&&!input.get(i).equalsIgnoreCase(givenList.get(i)))
测试。添加(“假”);
});
if(testing.isEmpty())
System.out.println(“flag=true”);
其他的
System.out.println(“flag=false”);
}
我希望这能帮助您并给您一个开始。不幸的是,您不能使用流同时处理两个列表。您可以做的是使用迭代器。我试着写了一些代码,应该是这样的:
publicstaticvoidstreamtest(列表给定列表){
列表测试=新建ArrayList();
IntStream.range(0,givenList.size())
.parallel()
.forEach(i->{
if(input.get(i)!=null
&&!(input.get(i).equalsIgnoreCase(“N/A”)
||givenList.get(i).equalsIgnoreCase(“不适用”)
&&!input.get(i).equalsIgnoreCase(givenList.get(i)))
测试。添加(“假”);
});
if(testing.isEmpty())
System.out.println(“flag=true”);
其他的
System.out.println(“flag=false”);
}
我希望这能帮助您并给您一个开始。可以使用
IntStream
为两个列表生成索引流,然后过滤掉不相关的列表值并匹配其余的列表值:
public可选getMatchedOutput(最终列表给出输入){
返回IntStream.range(0,givenInput.size())
.filter(i->null!=input.get(i)&&null!=givinput.get(i))
.filter(i->!“N/A”.equalsIgnoreCase(输入.获取(i))&&!“N/A”.equalsIgnoreCase(给定输入.获取(i)))
.allMatch(i->input.get(i).equalsIgnoreCase(givinInput.get(i)))
?可选。of(“标志=真”)
:可选。空();
}
测试已知数据:
input=Arrays.asList(“真”、“假”、“真”、“不适用”);
ComparisonString cs=新的ComparisonString();
System.out.println(cs.getMatchedOutput(Arrays.asList(“TRUE”、“N/A”、“N/A”、“FALSE”));
印刷品:
Optional[flag = true]
可以使用
IntStream
为两个列表生成索引流,然后过滤掉不相关的列表值并匹配其余的值:
public可选getMatchedOutput(最终列表给出输入){
返回IntStream.range(0,givenInput.size())
.filter(i->null!=input.get(i)&&null!=givinput.get(i))
.filter(i->!“N/A”.equalsIgnoreCase(输入.获取(i))&&!“N/A”.equalsIgnoreCase(给定输入.获取(i)))
.allMatch(i->input.get(i).equalsIgnoreCase(givinInput.get(i)))
?可选。of(“标志=真”)
:可选。空();
}
测试已知数据:
input=Arrays.asList(“真”、“假”、“真”、“不适用”);
ComparisonString cs=新的ComparisonString();
System.out.println(cs.getMatchedOutput(Arrays.asList(“TRUE”、“N/A”、“N/A”、“FALSE”));
印刷品:
Optional[flag = true]
您可以使用另一种可能的解决方案。它看起来像
python
zip
函数
公共类比较安装{
私有静态列表输入;
公共静态void main(字符串[]args){
输入=数组.asList(“真”、“假”、“真”、“不适用”);
ComparisonString cs=新的ComparisonString();
System.out.println(cs.getMatchedOutput(
数组。asList(“真”、“不适用”、“不适用”、“假”);
}
公共可选getMatchedOutput(最终列表给定输入){
boolean notFlag=IntStream.range(0,input.size())
//压缩到新对象
.mapToObj(i->新对(input.get(i),givenInput.get(i)))
//当发现错误标志时停止
.anyMatch(p->{
字符串inputValue=p.getKey();
字符串givenValue=p.getValue();
//真的会断流
返回inputValue!=null
&&!(“不适用”。相等信号情况(输入值)
||“不适用”。相等信号情况(给定值))