首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从方法返回迭代器

从方法返回迭代器
EN

Stack Overflow用户
提问于 2018-09-13 05:00:48
回答 5查看 80关注 0票数 2

removeTwos()方法返回时,我似乎不能打印Iterator中的元素。我正在尝试从列表中删除只有两个字符的元素。

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {

        // write your code here
        List<String> list = new ArrayList<>();
        list.add("hi");
        list.add("what");
        list.add("who");
        list.add("ok");

        System.out.println(removeTwos(list));
    }

    public static String removeTwos(List<String> stringList) {

        Iterator<String> itr = stringList.iterator();
        for(int i = 0; i < stringList.size(); i++) {
            if(itr.hasNext() && itr.next().length() == 2) {
                itr.remove();
                System.out.println(itr.toString());
            }
        }
        return itr.toString();
    }
}

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-09-13 05:15:17

问题是:你根本不需要Iterator来做你想做的事情。您可以使用列表的方法逐个搜索列表中的每一项。

试试这段代码,看看它是否适合你:

代码语言:javascript
复制
public class JavaApplication255 {

    public static void main(String[] args) {
        // write your code here
        List<String> list = new ArrayList<>();
        list.add("hi");
        list.add("what");
        list.add("who");
        list.add("ok");

        removeTwos(list);
        System.out.println(list);
    }

    public static void removeTwos(List<String> stringList){

        for(int i = stringList.size() - 1; i >= 0 ; i--){
            String string = stringList.get(i);

            if (string.length() == 2){
                stringList.remove(string);
            }
        }
    } 
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-13 05:11:14

要使用Iterator解决此问题,您可以将removeTwos方法编辑为如下所示:

代码语言:javascript
复制
public static String removeTwos(List<String> stringList) {

    Iterator<String> itr = stringList.iterator();
    while (itr.hasNext()) {
        String value = itr.next();
        if (value.length() == 2) {
            System.out.println(value);
            itr.remove();
        }
    }

    return stringList.toString();
}

使用Iterator时,在循环访问列表时从列表中移除元素是安全的。Here's a link,证明它是安全的。

票数 1
EN

Stack Overflow用户

发布于 2018-09-13 05:11:44

除非你需要使用iter,否则使用流和过滤器是很容易的。

代码语言:javascript
复制
List<String> noTwos = list.stream().filter(s-> s.length() != 2).collect(Collectors.toList());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52303431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档