java反转对象构造函数

时间:2017-06-15 23:14:07

标签: java list

我有问题,我创建了一个具有如下值的对象:Edge edge = new Edge(vertice1, vertice2, weight);并将其添加到myEdgesList.add(edge);`

在Java中是否有任何方法可以创建相同的列表,但使用反向的line1和line2,如下所示:Edge edge = new Edge(vertice2, vertice1, weight);并将其添加到同一列表中。

LinkedList<Edge> edgesList = new LinkedList<>();
    LinkedList<Edge> secondInverted = new LinkedList<>();
    CSVReader reader = null;
    try {
        reader = new CSVReader(new FileReader(csvFile));
        String[] line;
        while ((line = reader.readNext()) != null) {
            Vertex one = findVertexByName(verticesList, line[0]);
            Vertex second = findVertexByName(verticesList, line[1]);
            edgesList.add(new Edge(one, second, Integer.parseInt(line[2])));
            secondInverted.add(new Edge(second, one, Integer.parseInt(line[2])));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    List<Edge> newList = new ArrayList<>(edgesList);
    newList.addAll(edgesList);
    return newList;

提前谢谢!

2 个答案:

答案 0 :(得分:0)

我没有真正解决你的问题。你想用line1和line2作为参数添加一次形状,然后再用line2和line1作为参数添加吗? 喜欢

    Shape s1 = new Shape(line1, line2, weight);
Shape s2 = new Shape(line2, line1, weight);
list.add(s1);
list.add(s2);

答案 1 :(得分:0)

您可以通过多种方式实现此目的,具体取决于您创建新列表的时间 如果您想同时制作它们,请创建两种形状:

Shape shape = new Shape(line1, line2, weight);
Shape shape2 = new Shape(line2, line1, weight);
myShapeList.add(shape);
myShapeList2.add(shape2);

如果你想稍后再做,你可以:
1.克隆你的myShapeList,并循环遍历它的属性(如果你的对象中有一个setter和getter)
2.创建一个新的myShapeList2,for(i=0;i<myShapeList.size();i++)使用line1 = myShapeList[i].line2line2 = myShapeList[i].line1创建一个新的Shape,并将其添加到新列表中。 它们可以是预定义的(比如当你制作你的第一个列表时),或者你可以在对象中使用getter来获取它们。

如果您尝试取得一些进展并遇到任何问题,请发布您的代码 的更新
要返回包含您的列表的联合新列表,请尝试:

List<Edge> newList = new ArrayList<>(edgesList);
newList.addAll(secondInverted);
List<Edge> invertedList = new ArrayList<>(secondInverted);

您可以查看有关加入列表herehere的更多信息。