我正在尝试将下面的代码转换为Java8(使用流),但不确定如何使用流一起迭代两个列表。
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();
}
}
}
4条答案
按热度按时间e5nszbig1#
您可以使用另一种可能的解决方案。看起来像
python
zip
功能。输出
ohtdti5x2#
可以使用
IntStream
要为两个列表生成索引流,请过滤掉不相关的列表值并匹配其余的值:测试已知数据:
印刷品:
shstlldc3#
不幸的是,不能使用流同时处理两个列表。你能做的就是使用迭代器。我试过写一些代码,应该是这样的:
我希望这对你有帮助,给你一个开始。
ipakzgxi4#
你做这件事的方式没有任何问题,而且streams在这方面做得过火了,而且效率可能更低。不过,我有两个建议:
不需要布尔值。只是
return Optional.empty()
在一次失败的比较之后。否则,return Optional.of("flag = true")
在for循环之后。你应该检查一下是否有不平等的行为
List
尺寸。如果为循环选择较长的循环,它可能会引发异常。你可以选择Math.min
在这两种大小中,忽略比较中的额外元素,或者只检查列表大小是否相等,并确定这对于应用程序的列表相等意味着什么。