使用迭代器从ArrayList中删除字符串数组

时间:2019-03-04 20:49:02

标签: java iterator

我正在尝试使用StringArrayList删除给定的Iterator数组。有关给定应用程序的列表。我正在使用我的课本作为资源,但是对于为什么会收到错误cannot find symbol - method iterator();感到困惑。我是否应该使用Iterator从我的String中删除给定的ArrayList?还是我应该使用更好的循环?

非常感谢。

    public void removeApp(String name)
{
    Iterator<App> it = name.iterator(); 
    while(it.hasNext()) {
        App app = it.next();
        String appName = app.getName();
        if (appName.equals(name)) {
            it.remove();
            System.out.println(appName + "has been removed.");
        }
    }
    System.out.println("Can't find app. Please try again.");
}

3 个答案:

答案 0 :(得分:2)

这是因为参数name是一个字符串,并且您只能在实现.iterator()的对象上调用Iterable

name.iterator(); // here is the error

请参考documentation了解更多详细信息(和实现方式)。

答案 1 :(得分:1)

您是在name参数上而不是在应用列表上调用.iterator()

此外,您应在删除应用程序后return it.remove(); System.out.println(appName + "has been removed.");之后class Test extends StatelessWidget { @override Widget build(BuildContext context) { return new Scaffold( body: new Container( padding: EdgeInsets.all(64.0), child: new Column( children: <Widget>[ new ClipPath( clipper: new CustomHalfCircleClipper(), child: new Container( height: 300.0, width: 300.0, decoration: new BoxDecoration(color: Colors.blue, borderRadius: BorderRadius.circular(150.0) ), ), ) ], ), ), ); } } class CustomHalfCircleClipper extends CustomClipper<Path> { @override Path getClip(Size size) { final Path path = new Path(); path.lineTo(0.0, size.height / 2); path.lineTo(size.width, size.height / 2); path.lineTo(size.width, 0); return path; } @override bool shouldReclip(CustomClipper<Path> oldClipper) { return true; } } ,否则您将始终打印“找不到应用程序。请重试。” (除非您可以具有相同名称的各种App对象)。

答案 2 :(得分:1)

  

我应该使用迭代器从我的计算机中删除给定的字符串吗?   数组列表?还是我应该使用更好的循环?

Iterable的

for / foreach循环(ArrayList是一个实现)并非旨在在迭代期间删除元素。使用Iterator的方法是正确的。

您可以通过以下方式进行操作:

List<App> list = ...;
for(Iterator<App> it = list.iterator(); it.hasNext(); ) {
    App app = it.next();
    String appName = app.getName();
    if (appName.equals(name)) {
        it.remove();
        System.out.println(appName + "has been removed.");
    }
}

或者,您也可以使用List.removeIf(),例如:

List<App> list = ...;
list.removeIf(app -> app.getName().equals(name));