按字母顺序比较ArrayList中的String元素

时间:2016-02-09 15:55:17

标签: java arraylist

在这种方法中,我按字母顺序比较String个元素。换句话说,如果ArrayList中的元素按字母顺序大于最小String(方法中的参数)并且小于最大String(也是参数),则此{{ 1}}元素应从String中删除。

然而,在运行该方法之后,没有返回字符串,甚至没有返回方法调用之后的字符串。此外,当不满足ArrayList条件时,它会打印IF而不返回列表。

"Error"

3 个答案:

答案 0 :(得分:0)

在第一次迭代期间,h从列表中删除。因此,e被移动到第一个位置。因此,不再进行比较。改为使用迭代器。

Iterator<String> iterator1 = list.iterator();
while(iterator1.hasNext()){
    String i = iterator1.next();    
    if (i.compareTo(beginning)> 0 && i.compareTo(ending)< 0)
    {
        iterator1.remove();
    }
    else {
        System.out.println("Error");
    }
} 
return list;

答案 1 :(得分:0)

我会在这里指出一些事情。

首先,我建议不要在迭代时编辑对象,这只会引起混淆。

其次,基于这一点,如果您将要保留的列表添加到新列表中会更容易,然后返回新列表。但是如果你想修改现有的列表,那也是可能的。

public static ArrayList<String> removeInRange(ArrayList<String> list, String beginning, String ending) {
  ArrayList<String> matching = new ArrayList<String>();
  for (int i = 0; i<list.size(); i++) {
    if (list.get(i).compareTo(beginning)> 0 && list.get(i).compareTo(ending)< 0)
    {
        matching.add(list.get(i));
    }
    else {
        System.out.println("Error");
    }
  }
  list.removeAll(matching);

  return list;
}

答案 2 :(得分:0)

如果您使用的是Java 8.

请注意,这不会打印&#34;错误&#34;,个人而言,它没有多大意义,因为它不是错误,你只是忽略了价值。

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();
    list.add("h");
    list.add("e");
    list.add("x");

    List<String> filtered= removeInRange(list, "a", "k");
    System.out.println(filtered);

}

private static List<String> removeInRange(ArrayList<String> list, String low, String high) {
     return list.stream().filter(s -> s.compareTo(low) <= 0 || s.compareTo(high) >= 0).collect(Collectors.toList());
}