gpt4 book ai didi

java - 修改列表-流方法

转载 作者:行者123 更新时间:2023-11-29 04:12:05 25 4
gpt4 key购买 nike

我想修改流中已创建对象的列表。我意识到三种方法可以做到这一点,但我不确定它们的性能和可能的缩小尺寸。

  1. 返回相同的对象 - 不会浪费时间创建新对象,但对象是可变的
  2. 创建新对象-参数没有修改,但是对于大对象创建比较耗时
  3. 修改参数-只能使用ForEach,不能并行使用

代码下面的代码带有解释注释。

public class Test {

public static void main(String[] args) {
//Already created objects
List<Foo> foos0 = Arrays.asList(new Foo("A"));

//However I need to apply some modification on them, that is dependent on themselves

//1. Returning same object
List<Foo> foos1 = foos0.stream().map(Test::modifyValueByReturningSameObject).collect(Collectors.toList());

//2. Creating new object
List<Foo> foos2 = foos0.stream().map(Test::modifyValueByCreatingNewObject).collect(Collectors.toList());

//3. Modifying param
foos0.stream().forEach(Test::modifyValueByModifyingParam);
}

//Lets imagine that all methods below are somehow dependent on param Foo
static Foo modifyValueByReturningSameObject(Foo foo) {
foo.setValue("fieldValueDependentOnParamFoo");
return foo;
}

static Foo modifyValueByCreatingNewObject(Foo foo) {
Foo newFoo = new Foo("fieldValueDependentOnParamFoo");
return newFoo;
}

static void modifyValueByModifyingParam(Foo foo) {
foo.setValue("fieldValueDependentOnParamFoo");
return;
}
}

public class Foo {

public String value;

public Foo(String value) {
this.value = value;
}

public String getValue() {
return value;
}

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

那么问题是哪种方法最流畅?

编辑:我的意思是流式方法在性能方面最具优势。

编辑2: 1. 哪个是函数式方法? 2. 性能上哪个最好?

最佳答案

javadoc指出 Streams 应该避免副作用:

Side-effects in behavioral parameters to stream operations are, in general, discouraged, as they can often lead to unwitting violations of the statelessness requirement, as well as other thread-safety hazards.

因此,您应该更喜欢创建新对象而不是修改现有对象的解决方案。

关于java - 修改列表-流方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com