赞
踩
错误的示范
- public static void main(String[] args) {
- List<String> platformList = new ArrayList<>();
- platformList.add("博客园");
- platformList.add("CSDN");
- platformList.add("掘金");
-
- for (String platform : platformList) {
- if (platform.equals("博客园")) {
- platformList.remove(platform);
- }
- }
-
- System.out.println(platformList);
- }
主要原因就是,删除后,list对象发生变化,下标也变了。
正确的方式一:for循环,同时减少下标
- public static void main(String[] args) {
- List<String> platformList = new ArrayList<>();
- platformList.add("博客园");
- platformList.add("CSDN");
- platformList.add("掘金");
-
- for (int i = 0; i < platformList.size(); i++) {
- String item = platformList.get(i);
-
- if (item.equals("博客园")) {
- platformList.remove(i);
- i = i - 1;
- }
- }
-
- System.out.println(platformList);
- }

正确的方式二:Iterator对象的remove
- public static void main(String[] args) {
- List<String> platformList = new ArrayList<>();
- platformList.add("博客园");
- platformList.add("CSDN");
- platformList.add("掘金");
-
- Iterator<String> iterator = platformList.iterator();
- while (iterator.hasNext()) {
- String platform = iterator.next();
- if (platform.equals("博客园")) {
- iterator.remove();
- }
- }
-
- System.out.println(platformList);
- }

正确方式三:for循环,倒叙
- public static void main(String[] args) {
- List<String> platformList = new ArrayList<>();
- platformList.add("博客园");
- platformList.add("CSDN");
- platformList.add("掘金");
-
- for (int i = platformList.size() - 1; i >= 0; i--) {
- String item = platformList.get(i);
-
- if (item.equals("掘金")) {
- platformList.remove(i);
- }
- }
-
- System.out.println(platformList);
- }

正确方式四:stream filter过滤
- public static void main(String[] args) {
- List<String> platformList = new ArrayList();
- platformList.add("博客园");
- platformList.add("CSDN");
- platformList.add("掘金");
- platformList = platformList.stream().filter(e -> !e.startsWith("博客园")).collect(Collectors.toList());
- System.out.println(platformList);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。