Java:用于循环对象的字符串

时间:2018-06-06 11:17:47

标签: java string list for-loop iteration

我是Java新手,我必须解决这个问题。我有这段代码:

    public class StringList { 
        private String list = "";
        public StringList(String... str) { 
            for (String s : str) list += s+"\t"; 
        }
    }

我必须更改类,以便其对象允许使用此指令进行迭代:

for (String s : new StringList("a", "b", "c")) System.out.println(s);

我的想法是创建一个List并对其进行迭代。所以我用这种方式改变了代码:

public class StringList { 
    private List<String> list = new ArrayList<String>();
    public StringList(String... str) {
        for (String s: str) list.add(s);
    }
}

但是当我尝试使用上面的指令进行迭代时,我得到了这个错误(只能遍历数组或java.lang.Iterable 的实例)并且我花了好几个小时试图修复它但是我一直都在失败。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

您必须像StringList这样实施Iterable<String>

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.function.Consumer;

public class StringList implements Iterable<String> {
    private List<String> list = new ArrayList<String>();

    public StringList(String... str) {
        for (String s: str) { list.add(s); }
    }

    @Override
    public Iterator<String> iterator() {
        return list.iterator();
    }

    @Override
    public void forEach(Consumer<? super String> action) {
        list.forEach(action);
    }

    @Override
    public Spliterator<String> spliterator() {
        return list.spliterator();
    }
}

答案 1 :(得分:0)

要以干净的方式完成,请查看java.lang.Iterable接口:https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html

如果您的StringList类实现它,那么该指令将起作用。我会让你自己完成练习,但你可以从

开始
public class StringList implements Iterable<String> {
    // the attribute you need to store the strings object

    // your constructor

    @Override
    public Iterator<String> iterator() {
        // This is what you need to fill
    }
}

PS:使用字符串列表作为属性根本不是一个坏主意,它将为您节省大量的精力和时间,搜索您可以用它做什么