在这种方法中,我按字母顺序比较String
个元素。换句话说,如果ArrayList
中的元素按字母顺序大于最小String
(方法中的参数)并且小于最大String
(也是参数),则此{{ 1}}元素应从String
中删除。
然而,在运行该方法之后,没有返回字符串,甚至没有返回方法调用之后的字符串。此外,当不满足ArrayList
条件时,它会打印IF
而不返回列表。
"Error"
答案 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());
}