ArrayList在java中有两个方法

时间:2016-06-01 08:04:05

标签: java arraylist iterator

我在java中有$filePath = 'badges/1.png'; $path = public_path()."/".$filePath Storage::disk('local')->get($path); dd($contents); ,有2个方法。我想立刻将这两种方法用于我的arraylist。

在第一种方法中,我使用了方法arraylist,因此arraylist不再具有所有元素。

对于第二种方法,我还需要 arraylist及其所有元素。但是Arraylist已不再相同了。

我正在考虑 java中的多线程。有没有其他方法可以解决这个问题?

这是我的代码:

remove()

输出

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<String> list = new ArrayList<String>();

    // Adding items to arrayList
    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("ddd");
    System.out.println("The arraylist contains the following elements: " + list);

    method1(list);
    method2(list);
}

public static void method1(List<String> list) {

    for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
        String s = iterator.next();
        if (!s.startsWith("a")) {
            iterator.remove();
        }
    }
    System.out.println("List1: " + list);
}

public static void method2(List<String> changedFilesList) {

    for (Iterator<String> iterator = changedFilesList.iterator(); iterator.hasNext();) {
        String s = iterator.next();
        if (!s.startsWith("b")) {
            iterator.remove();
        }
    }
    System.out.println("List2:" + changedFilesList);

预期输出:

The arraylist contains the following elements: [aaa, bbb, ccc, ddd]
List of the other: [aaa]
List of the other: []

4 个答案:

答案 0 :(得分:0)

在调用第一种方法之前复制一下列表:

List<String> list2 = new ArrayList(list);

然后,使用method1拨打list,使用method2拨打list2

答案 1 :(得分:0)

试试这个

    public static void method1(List<String> list) {  
        List<String> list1=new ArrayList<String>();
        list1.addAll(list);
        for (Iterator<String> iterator=list1.iterator();iterator.hasNext();{
            String s = iterator.next();
            if (!s.startsWith("a")) {
                iterator.remove();
            }
       }
       System.out.println("List1: " + list1);
    }

    public static void method2(List<String> changedFilesList) {
        List<String> list1=new ArrayList<String>();
        list1.addAll(changedFilesList);
        for (Iterator<String> iterator=list1.iterator();iterator.hasNext();{
            String s = iterator.next();
            if (!s.startsWith("b")) {
            iterator.remove();
            }
        }
        System.out.println("List2:" + list1);
    }

答案 2 :(得分:0)

  • 由于 ArrayList 实施可克隆,您可以在调用 method2()之前使用以下内容:

    final List<String> copy = (List) list.clone();
    
  • 按如下方式调用 method2()

    method2(copy);
    

答案 3 :(得分:0)

这两种方法看起来太相似了,你应该将它们合二为一。另外,以不同的方式看待它怎么样?而不是从列表中删除东西,将它们添加到另一个。

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();

    list.add("aaa");
    list.add("bbb");
    list.add("ccc");
    list.add("ddd");
    System.out.println("The arraylist contains the following elements: " + list);

    System.out.printLn("List 1: " + method(list, "a"));
    System.out.printLn("List 2: " + method(list, "b"));
}

private List<String> method(List<String> list, String filter) {
    List<String> filteredList = new ArrayList<>();
    for (String s : list) {
        if (s.startsWith(filter)) {
            filteredList.add(s);
        }
    }

    return filteredList;
}