我正在尝试使用String
从ArrayList
删除给定的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.");
}
答案 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));