【问题标题】:java invert values in object constructorjava在对象构造函数中反转值
【发布时间】:2017-11-18 14:09:47
【问题描述】:

我有疑问,我创建了一个具有如下值的对象: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;

提前谢谢你!

【问题讨论】:

  • 当然。你试过什么吗?有没有具体问题?还是您要求我们为您编写代码?
  • 答案似乎在问题中......
  • 我试过写它,但它在一个列表中有另一个 line2 和 line 1 对象而不是另一个列表。它们必须是内部相同的对象。
  • 也许你可以给我看任何例子,拜托
  • 可能第一个和第二个对象不一样,因为如果我对所有对象进行硬编码,程序就可以工作

标签: java list


【解决方案1】:

我真的不明白你的问题。您想以 line1 和 line2 作为参数添加一次形状,然后以 line2 和 line1 作为参数添加一次? 喜欢

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

【讨论】:

  • line1 和 line2 是对象,我想在第二个列表中使用相同的对象,它们在内存中不能有其他位置,它们必须相同
  • 如果它们是对象,您只是在创建它们时将它们引用到形状,它们应该是相同的对象。你是如何确定它们不一样的?
  • 用等号检查,或者如果我打印它们,它们还有另一个数字
  • 但据我所知,情况并非如此。你能提供你的完整代码吗?也许这会帮助我们解决您的问题。
  • 添加的列表不应该倒置吗?
【解决方案2】:

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

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&lt;myShapeList.size();i++)新建一个Shape,line1 = myShapeList[i].line2line2 = myShapeList[i].line1,添加到新列表中。 它们可以是预定义的(例如当您制作您的第一个列表时),或者您可以使用对象中的 getter 来获取它们。

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

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

您可以查看更多关于加入列表的信息here,或here

【讨论】:

  • 尝试创建一个简单的示例,如果它不起作用,请发布它
  • @george 你想返回两个列表:原始列表和倒置列表?
  • 我需要把他们一起加入
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2013-10-20
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多