当前位置: 首页 > 知识库问答 >
问题:

Java流:比较一个列表是否等于第二个列表的开头(不比较整个列表)

朱和惬
2023-03-14

我在Java有两个列表,例如list1=(A, B, C)list2=(A, B, C, D)我希望这些列表被比较为相等,因为list1等于list2的START。

我得到了没有流的代码:

List<LetterForAnalysis> textList = LetterHelper
        .findNikudLetterForAnalysisList(text);

List<LetterForAnalysis> expressionList = LetterHelper
        .findNikudLetterForAnalysisList(expression.getHebrew());

if (textList.size() > expressionList.size()) {
    return false;
}
for (int i = 0; i < textList.size(); i++) {
    if (!LetterForAnalysis.isEqual(textList.get(i),
            expressionList.get(i))) {
        return false;
    }
}
return true;

是否可以使用Java流来实现这一点?如果是,怎么做?我正在努力学习如何使用流,这真的很难。提前谢谢你。

共有3个答案

金子轩
2023-03-14

我认为streams不是解决您问题的合适方法。流意味着要终止,您可能希望在发现字符不匹配时立即终止流。

请注意,您发布的解决方案有一个bug,因为for循环变量已初始化为1,而不是0。

public boolean startsWith(List<LetterForAnalysis> needles, List<LetterForAnalysis> haystack) {
    if (needles.size() > haystack.size())
      return false;
    Iterator<LetterForAnalysis> needlesIter = needles.iterator();
    Iterator<LetterForAnalysis> haystackIter = haystack.iterator();
    while (needlesIter.hasNext()) {
      if (!haystackIter.hasNext() 
          || !LetterForAnalysis.isEqual(hayStackIter.next(), needlesIter.next())
        return false;
    }
    return true;
}
井昊乾
2023-03-14

你可以这样试试:

List<String> list1 = new ArrayList<>(Arrays.asList("1","2", "3", "4"));
List<String> list2 = new ArrayList<>(Arrays.asList("1", "2", "3"));

boolean result = Collections.indexOfSubList(list1, list2) == 0;

<代码>集合。indexofpublist(list1,list2)将返回一个索引,子列表从这里开始。

呼延臻
2023-03-14

您可以使用IntStream对list A和allMatch的索引进行流式传输,以检查每个索引的条件是否为真。如果谓词在流的早期返回false,这将短路。

if (a.size() > b.size()) {
    return false;
}
final IntStream indices = IntStream.range(0, a.size());
return indices.allMatch((i) -> a.get(i).equals(b.get(i)));
 类似资料:
  • 问题内容: 我有两个列表(不是Java列表,可以说两列) 例如 我想要一个返回多少个相同元素的方法。对于此示例,它应该为3,并且应该返回列表的相似值和不同的值。 如果是,我应该使用哈希图,然后用什么方法获得结果? 请帮忙 PS:这不是学校作业:)因此,如果您只是指导我就足够了 问题答案: 编辑 这是两个版本。一种使用,另一种使用 比较它们并从中创建您自己的版本,直到获得所需的内容。 这应该足以覆盖

  • 问题内容: 假设我有两个表,表A和表B,并且我想比较某个列。 例如, 表A包含以下列:IP,主机,应用 表B具有以下列:IP,数据中心,服务器,模型,最后更新 如何比较两个表之间的IP列以获取差异? 我知道表是否具有相同的列,我可以使用并集和“减号”来获取差异,但是我无法找出表具有不同列的方式。 谢谢! 问题答案: 这将输出两个表中不匹配行的所有列,并且在任一侧都有NULL。

  • 第一次来这里,所以我希望这是有意义的! 我有两个对象数组,比如l1和l2,我想在这两个列表之间进行比较,并在l3中得到一个不匹配的值。用户类包含2个字符串: 比如,l1包含:Java、JSF、JAXR、foo l2包含:JSF、JAXR 我可以对匹配的值进行比较,但不能对不匹配的值进行比较。这种逻辑似乎有缺陷。有什么帮助吗? 对于匹配值: 但是,对于不匹配,当我说不等于时,我得到的不是唯一的值,而

  • 我有一个关于列表比较器的问题。我有一个带有表格的网页应用程序。我可以在这个表格中编辑数据,也可以删除行。当我编辑数据时,标准比较器工作正常,但当我删除行时,我有问题。这个问题很常见(我想),当我删除一行时,javers比较旧列表和现在的列表时,看起来是这样的:旧列表有两个对象,现在列表有一个对象(我删除了第一个),现在javers不知道哪个对象被删除了,他比较旧列表中的第一个对象和新列表中的第二个

  • 问题内容: 我有两个列表 , 都包含 MyData 类型的对象,而 MyData* 包含这些变量。 利斯塔和数组listB都包含MyData的对象,现在我要两个列表的对象值比较这里 的名字 ,以及 检查 变量一样,如果 利斯塔 包含这些对象值 和ListB也包含 然后我必须比较列表并返回false,因为两个列表相同但是如果ListA包含 和 ListB 包含 然后我必须比较列表并返回true,因为