为了账号安全,请及时绑定邮箱和手机立即绑定

从方法返回迭代器

从方法返回迭代器

江户川乱折腾 2021-09-15 16:39:23
我似乎无法在Iterator从方法返回时打印元素removeTwos()。我试图从列表中删除只有两个字符的元素。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();    }}
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

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


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


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);

            }

        }

    } 

}


查看完整回答
反对 回复 2021-09-15
?
慕标5832272

TA贡献1966条经验 获得超4个赞

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


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,在循环遍历列表时从列表中删除元素是安全的。这是一个证明它是安全的链接。


查看完整回答
反对 回复 2021-09-15
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

除非您需要使用 iter,否则使用流和过滤器很容易 1 班轮。

List<String> noTwos = list.stream().filter(s-> s.length() != 2).collect(Collectors.toList());



查看完整回答
反对 回复 2021-09-15
  • 3 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信