如何在java中返回2个ArrayLists

时间:2017-07-30 03:19:13

标签: java class reference return keyvaluepair

我需要制作一个return 2 ArrayLists的方法。

我已经阅读了一些答案并提出了一些选择:

  1. return Pair(arrList 1, arrList 2);

    这是更容易的选项,但我不知道它是否有效,我不知道如何从调用此方法的方法中的ArrayLists中提取Pair

    < / LI>
  2. 尝试制作一个包含class两个ArrayList的{​​{1}}。我不知道这是否有效,但我认为应该这样做。

  3. 是否有人知道这些选项是否有效,或者我可以使用其他任何选项?

6 个答案:

答案 0 :(得分:0)

创建第三个arraylist,并将两个arraylists放在第三个arraylist中并转换它。

答案 1 :(得分:0)

您可以使用java.util.Map作为返回类型;

示例代码:

public Map<Integer, List> getLists() {
    Map<Integer, List> listMap = new HashMap<Integer, List>();
     List list1 = new ArrayList();
     List list2 = new ArrayList();
     // Fill your lists

     listMap.put(1, list1);     
     listMap.put(2, list2);

     return listMap;
}


// to get list from map
Map<Integer, List> lists = getLists();

List l1 = lists.get(1);
List l2 = lists.get(2);

答案 2 :(得分:0)

创建一个包含属性列表

的类
z

从您的方法返回类的新对象。如果列表是homo-genius retun,则列出两者。 注意:你的两个解决方案都是正确的,它肯定会起作用,如果你做对了:)

答案 3 :(得分:0)

我将讨论如何实施您提到的每种方法。

Apache Common Lang API中有一个Pair类,技术上不属于“标准”库。您可以在http://commons.apache.org/proper/commons-lang/下载。

Pair的文档是here

你可以像这样使用它:

// in the method
public Pair<ArrayList, ArrayList> yourMethod() {
    ...
    return ImmutablePair.of(yourArrayList1, yourArrayList2);
}

// when you call the method
Pair<ArrayList, ArrayList> pair = yourMethod();
pair.getLeft(); // gets you the first array list
pair.getRight(); // gets you the second array list

您还可以创建自己的Pair课程,这实际上是您的第二种方法。

以下是this post的示例。

public class Pair<K, V> {

    private final K element0;
    private final V element1;

    public static <K, V> Pair<K, V> createPair(K element0, V element1) {
        return new Pair<K, V>(element0, element1);
    }

    public Pair(K element0, V element1) {
        this.element0 = element0;
        this.element1 = element1;
    }

    public K getElement0() {
        return element0;
    }

    public V getElement1() {
        return element1;
    }

}

你可以像这样使用它:

// in the method
public Pair<ArrayList, ArrayList> yourMethod() {
    ...
    return Pair.createPair(yourArrayList1, yourArrayList2);
}

// when you call the method
Pair<ArrayList, ArrayList> pair = yourMethod();
pair.getElement0(); // gets you the first array list
pair.getElement1(); // gets you the second array list

答案 4 :(得分:0)

第三个选项是创建一个类,该类包含两个ArrayList的相应索引中的元素对。例如,如果一个ArrayList包含名称而第二个ArrayList包含生日,那么您可以创建一个包含名称和生日的类。现在使用新类的实例创建一个ArrayList

此解决方案取决于两个ArrayList的数据之间的关系。如果数据与我的名字和生日例子没有密切关系,那么这种解决方案可能不合适。

答案 5 :(得分:0)

我必须为 Delta 调试实现相同的双 ArrayList。

我将私有变量与 getter 和 setter 以及一个构造函数一起使用,该构造函数在构造函数中使用长度初始化 ArrayList。

这是我的类(它是私有的,因为它在使用它的更大的类中):

private class DeltaSegments {
    private ArrayList<String> deltas;
    private ArrayList<String> nablas;

    DeltaSegments(int dSize, int nSize) {
        deltas = new ArrayList<String>(dSize);
        nablas = new ArrayList<String>(nSize);
    }

    public ArrayList<String> getDeltas() {
        return deltas;
    }

    public ArrayList<String> getNablas() {
        return nablas;
    }

    public void setDeltas(ArrayList<String> _deltas) {
        deltas = _deltas;
    }

    public void setNablas(ArrayList<String> _nablas) {
        nablas = _nablas;
    }
}

这是我实例化它的方法:

private DeltaSegments getDeltaSegments(String str, int segments) {

    ArrayList<String> deltas = new ArrayList<String>(segments);
    ArrayList<String> nablas = new ArrayList<String>(segments);

    // ... Add data to deltas/nablas here ... //

    DeltaSegments ds = new DeltaSegments(segments, segments);
    ds.setDeltas(deltas);
    ds.setNablas(nablas);
    return ds;
}

以后访问它们:

DeltaSegments ds = getDeltaSegments(failingLine, n);
ArrayList<String> deltas = ds.getDeltas();
ArrayList<String> nablas = ds.getNablas();

希望这会有所帮助!

相关问题