Java 如果列表中存在对象,则更新该对象;如果不存在,则将其添加到列表中

Java 如果列表中存在对象,则更新该对象;如果不存在,则将其添加到列表中,java,algorithm,Java,Algorithm,我想更新列表中的对象(若存在),若将其添加到列表中 我可以只写更新,但如果使用流在列表中不存在对象,我不知道如何将对象添加到列表中 代码更新对象: public List<Parameter> update(List<Parameter> oldParameters, List<Parameter> newParameters) { return oldParameters .stream()

我想更新列表中的对象(若存在),若将其添加到列表中

我可以只写更新,但如果使用流在列表中不存在对象,我不知道如何将对象添加到列表中

代码更新对象:

public List<Parameter> update(List<Parameter> oldParameters, List<Parameter> newParameters) {
        return oldParameters
                .stream()
                .map(p -> newParameters
                        .stream().
                        filter(u -> p.getName().equals(u.getName()))
                        .findFirst()
                        .orElse(p)).collect(Collectors.toList());
}
测试:

def“如果存在,应更新值”(){
鉴于:
List oldParameters=new ArrayList();
对于(int i=0;i<15;i++){
参数=新参数(“名称测试”+i,“旧值”+i)
oldParameters.add(参数)
}
List currentParameters=new ArrayList();
对于(int i=5;i<10;i++){
参数=新参数(“名称测试”+i,“新值”+i)
currentParameters.add(参数)
}
什么时候:
def result=subject.update(旧参数、当前参数)
然后:
result.get(5).getValue()=“newValue5”
result.get(6).getValue()=“newValue6”
result.get(7).getValue()=“newValue7”
result.get(8).getValue()=“newValue8”
result.get(9).getValue()=“newValue9”
}
def“如果不存在,应将对象添加到列表中”(){
鉴于:
List oldParameters=new ArrayList();
对于(int i=0;i<15;i++){
参数=新参数(“名称测试”+i,“旧值”+i)
oldParameters.add(参数)
}
List currentParameters=new ArrayList();
对于(int i=5;i<10;i++){
参数参数=新参数(“新参数”+i,“新值”+i)
currentParameters.add(参数)
}
什么时候:
def result=subject.update(旧参数、当前参数)
然后:
结果.大小()==30
}
谢谢你的任何进展!
致以最诚挚的问候

您使用了错误的收藏类型。您应该使用
映射
,其中“键”是参数名,“值”是
参数
对象。然后只需使用
Map#put(键、值)
。如果该键已存在,则将替换该值,否则将添加该键和值。如果您需要一致有序的
列表
视图,只需使用
LinkedHashMap

@Data
public class Parameter {

    private String name;
    private String value;
}
 def "Should update value if exists"() {
        given:

        List<Parameter> oldParameters = new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            Parameter parameter = new Parameter("nameTest" + i, "oldValue" + i)
            oldParameters.add(parameter)
        }
        List<Parameter> currentParameters = new ArrayList<>();
        for (int i = 5; i < 10; i++) {
            Parameter parameter = new Parameter("nameTest" + i, "newValue" + i)
            currentParameters.add(parameter)
        }

        when:
        def result = subject.update(oldParameters,currentParameters)

        then:
        result.get(5).getValue() == "newValue5"
        result.get(6).getValue() == "newValue6"
        result.get(7).getValue() == "newValue7"
        result.get(8).getValue() == "newValue8"
        result.get(9).getValue() == "newValue9"
    }

    def "Should add objects to the list if not exists"() {
        given:

        List<Parameter> oldParameters = new ArrayList<>();
        for (int i = 0; i < 15; i++) {
            Parameter parameter = new Parameter("nameTest" + i, "oldValue" + i)
            oldParameters.add(parameter)
        }
        List<Parameter> currentParameters = new ArrayList<>();
        for (int i = 5; i < 10; i++) {
            Parameter parameter = new Parameter("newParameter" + i, "newValue" + i)
            currentParameters.add(parameter)
        }

        when:
        def result = subject.update(oldParameters,currentParameters)

        then:
        result.size() == 30
    }