Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java init对象和使用流设置属性_Java_Dictionary_Java Stream - Fatal编程技术网

Java init对象和使用流设置属性

Java init对象和使用流设置属性,java,dictionary,java-stream,Java,Dictionary,Java Stream,我正在尝试将列表克隆到新列表,并在新列表中设置属性。 我尝试使用Java8流,因为它使克隆变得简单。 我的代码可以工作,但它从声纳中发出这种代码气味: 不应声明局部变量,然后立即返回或抛出(squid:S1488) 有没有一种不用局部变量的方法? 代码: List clonedList=listToClone.stream() .地图(项目->{ 克隆=新的myObject(项目); 克隆.setLifeCycle(“someLifeCycle”); 返回克隆; }) .collect(Coll

我正在尝试将列表克隆到新列表,并在新列表中设置属性。 我尝试使用Java8流,因为它使克隆变得简单。 我的代码可以工作,但它从声纳中发出这种代码气味:

不应声明局部变量,然后立即返回或抛出(squid:S1488)

有没有一种不用局部变量的方法? 代码:

List clonedList=listToClone.stream()
.地图(项目->{
克隆=新的myObject(项目);
克隆.setLifeCycle(“someLifeCycle”);
返回克隆;
})
.collect(Collectors.toList());

谢谢

这是一个警告,因为您不必要地使用了新变量
克隆
,而不是直接链接函数,如

List<myObject> clonedList = listToClone.stream()
    .map(item -> {return (new myObject(item)).setLifeCycle("someLifeCycle");})
    .collect(Collectors.toList());
List clonedList=listToClone.stream()
.map(项->{return(newmyobject(项)).setLifeCycle(“someLifeCycle”);})
.collect(Collectors.toList());
您的代码如下所示:

    List<MyObject> clonedList = listToClone.stream()
 .map(item -> new MyObject(item,"someLifeCycle")).collect(Collectors.toList());
List clonedList=listToClone.stream()
.map(item->newmyobject(item,“someLifeCycle”).collect(Collectors.toList());
您可以尝试以下方法:

List<myObject> clonedList = listToClone.stream()
                                       .map(myObject::new)
                                       .map(o -> {
                                           o.setLifeCycle("someLifeCycle");
                                           return o;
                                       })
                                       .collect(Collectors.toList());
List clonedList=listToClone.stream()
.map(myObject::新建)
.map(o->{
o、 setLifeCycle(“someLifeCycle”);
返回o;
})
.collect(Collectors.toList());

您能用完整的代码和错误编辑您的问题吗?我不确定您的问题是否在map方法上。你能展示一下这个方法的其余部分吗。您的map方法的问题是没有在map方法中声明变量。我总是使用尽可能小的范围。但这不是你的问题here@Sodala另一方面,如果克隆的不是局部变量,则无法编译。奇怪。请阅读“如何创建一个”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。此答案涉及筛选,但基本相同:或者只是
.map(item->new myObject(item).setLifeCycle(“someLifeCycle”)
假设
setLifeCycle
不返回
void
。我不会忽略要映射的函数应该是“应用于每个元素的无状态函数”。@Aomine好吧,收集新对象,然后在clonedList上调用
forEach
,设置我们需要的属性,这样会更干净。问题是我们是否可以在没有局部变量的情况下做到这一点。”问题是我们是否可以在没有局部变量的情况下做到这一点“.那么做
listToClone.stream().map(myObject::new).peek(o->o.setLifeCycle(“someLifeCycle”).collect(toList())
与使用statefuly
map
函数一样糟糕,因为
peek
应该仅用于调试目的。”。不管怎样,如果你打算建议使用这个代码,那么至少说明它可能导致的问题。与您的解决方案不同,OP显示的原始代码可以完美地按顺序和并行工作。由于这些原因,请不要使用peek它应该只用于调试,因此java文档告诉我们:@Aomine为什么并行工作不安全?初始列表中每一项的映射都将按顺序执行。对于我还没有看到的UnaryOperator,我会给出+1。但是-1只是删除了一堆(不是很好的缩进)代码。所以,零和游戏。@GhostCat哪一个甚至不编译。@Aomine哪一个不编译?@MykhailoMoskura
final someLifeCycle
对不起,我打字太快了
    List<MyObject> clonedList = listToClone.stream()
 .map(item -> new MyObject(item,"someLifeCycle")).collect(Collectors.toList());
List<myObject> clonedList = listToClone.stream()
                                       .map(myObject::new)
                                       .map(o -> {
                                           o.setLifeCycle("someLifeCycle");
                                           return o;
                                       })
                                       .collect(Collectors.toList());