Изменение значения в списке без потери старых значений - PullRequest
0 голосов
/ 27 апреля 2020

Я запрограммировал алгоритм, который изменит переданный список list.get(i).getValue().setValue("somvALUE");, чтобы выполнить свою работу.

Но изменение списка с помощью установщика также приводит к изменению исходного списка. Однако мне все еще нужен старый список.

Есть ли способ изменить значение только в переданном списке?

РЕДАКТИРОВАТЬ: Я решил свою проблему с конструктором копирования

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Создайте копию исходного списка в новый список:

( примечание: в приведенных ниже примерах список содержит объекты String )

List<String> newList = new ArrayList<>(originalList);

You затем можно внести изменения в newList . Таким образом, ваш первоначальный список останется прежним, в то время как newList будет иметь измененное значение.

Java 8:

List<String> newList = originalList.stream()
                        .collect(Collectors.toList());
0 голосов
/ 27 апреля 2020


import java.util.ArrayList;
import java.util.List;


class CloneExample {

    public static void main(String[] args) throws CloneNotSupportedException {
        List<JavaBean> list = new ArrayList<>();
        int i = 1;
        JavaBean localBean =  ((JavaBean) list.get(i).clone()); // Clone the object
        localBean.setValue("somvALUE"); // Change that object and the input list is not tampered
    }
}

class JavaBean implements Cloneable {
    private String value;

    public void setValue(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    protected Object clone() {
        JavaBean clone;
        try {
            clone = (JavaBean) super.clone();

            //Copy new date object to cloned method
            clone.setValue(this.getValue());
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
        return clone;
    }
}

...