从方法返回迭代器

时间:2018-09-12 21:00:48

标签: java arrays arraylist iterator

从方法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();
    }
}

谢谢。

6 个答案:

答案 0 :(得分:1)

要使用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时,可以安全地从列表中删除元素,并循环遍历。 Here's a link证明它是安全的。

答案 1 :(得分:1)

使用流和过滤器很容易1衬纸,除非您需要使用iter。

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

答案 2 :(得分:1)

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

尝试以下代码,看看它是否对您有用:

Iterator

答案 3 :(得分:0)

如果您想使用for(int idx..)循环并删除所有项目,则应从头到尾进行迭代。

for(int idx=stringList.size()-1; idx>=0; idx--){
   String val = stringList.get(idx);
   if (val.length()==2)
      stringList.remove(idx);
}
...later if you want to print a list..
for(int idx=0; idx<stringList.size(); idx++) {
   System.out.println( String.format("%d:%s", idx, stringList.get(idx)) );

答案 4 :(得分:0)

我喜欢将url = 'my_url' payload = { 'client_id': 'my_id', 'api_key': 'my_key', "data": { "uuid": "myUUID", "timeStamp": "2018-09-12T06:17:48+00:00", "updateVals": x } } 循环与迭代器一起使用:

for

输出:

public static void removeTwos(List<String> stringList) 
{
    for (Iterator<String> itr = stringList.iterator(); itr.hasNext();)
        if (itr.next().length() == 2) itr.remove();
}

public static void main(String[] args)
{
    String[] arr = { "hi", "what", "who", "ok" };
    List<String> list = new ArrayList<>(Arrays.asList(arr));
    removeTwos(list);
    System.out.println(list);
}   

答案 5 :(得分:0)

public static String removeTwos(List<String> stringList){
    return stringList.stream()
            .filter(p -> p.length() != 2)
            .collect(Collectors.joining(", "));
}

返回:

  

什么,谁