【问题标题】:Best way to compare list elements比较列表元素的最佳方法
【发布时间】:2017-08-28 20:53:05
【问题描述】:

我有一个字符串列表List<String> treeList。我想将列表的最后四个元素与每个元素的预定义字符串进行比较。最好的方法是什么?

我认为的一种方法是

String firstParent = treeList.get(treeList.size() - 1);
String secondParent = treeList.get(treeList.size() - 2);
String thirdParent = treeList.get(treeList.size() - 3);
String fourthParent = treeList.get(treeList.size() - 4);

if(firstParent.equals("a") && secondParent.equals("b") && thirdParent.equals("c") && fourthParent.equals("d")) {
     return true;
}

有没有更少的拼写错误方法?列表比较可以针对 2、3 或 4 个元素。

【问题讨论】:

  • 由于您想将每 4 个最后一个元素与不同的字符串进行比较,我想说任何压缩代码的尝试都会使其实际上更难阅读,因此更糟。我会说保持天真的方式。

标签: java


【解决方案1】:

您可以获取一个子列表并将其与您自己的值列表进行比较:

List<String> expected = Arrays.asList("a", "b", "c", "d");
List<String> actual = treeList.subList(treeList.size() - 4, treeList.size());
if (actual.equals(expected)) {
    return true;
}

【讨论】:

  • 如果treeList.size() - 4返回负值怎么办?
  • @NikolasCharalambidis 你为什么问我?询问 OP。
  • treeList.size() - 4 不能为负数。这是通过调用函数来确保的。
  • 如果expected.size() 为3,则会抛出IndexOutOfBoundsException。
  • @NikolasCharalambidis 就像 OP 的方法一样。显然这不是问题。
【解决方案2】:

如果您要对从 List 派生的字符串进行字符串比较,请首先确保 List 有足够的元素,否则您将得到 IndexOutOfBoundsException。在比较字符串时,确保检查的第一个值不为空总是好的,所以我也会更改对 .equals() 的调用...

if(treeList.size() >=4 && "a".equals(firstParent) && "b".equals(secondParent) && "c".equals(thirdParent) && "d".equals(fourthParent)){ // etc... }

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多