我有一个叫做列表的对象列表。使用list.stream(),我需要创建一个相同对象的新列表,其中新列表包含所有原始条目,新列表包含每个条目的副本,其中修改了一个字段。我知道如何使用list.stream()两次完成这一操作,但我希望在1个stream下完成这一操作。
这就是我两次使用list.stream()完成任务的方式
newList = list.stream().collect(Collectors.toList());
newList.addAll(list.stream().map(l -> {SomeObject a = new SomeObject(l);
a.setField1("New Value");
return a;
}).collect(Collectors.toList())
);
使用flatmap
(假设您不介意交错原始值和派生值):
newList = list.stream()
.flatMap(l -> {
SomeObject a = new SomeObject(l);
a.setField1("New Value");
return Stream.of(l, a);
})
.collect(toList());
如果只是不想使用stream()
两次,则可以使用addall
避免使用第一次;和第二个代码的不必要的collection
:
newList = new ArrayList<>(list.size() * 2);
newList.addAll(list);
list.stream()
.map(l -> {
SomeObject a = new SomeObject(l);
a.setField1("New Value");
return a;
})
.forEach(newList::add);
问题内容: 我有一张表格,其中每一行都是以下形式: 凡我查询寻找的价值配对,使用。就查询时间而言,改为使用一个表(其中每行是一个排列)是否更有效: 这样,我这次使用=运算符查询了值b。 值得注意的是,我感兴趣的用例当前有大约10,000行,其中每个“列表”元素平均有8个条目。我同时标记了两者,因为使用和的数据库都存在类似的问题。 问题答案: 我的查询在其中使用LIKE寻找一对值,%b%。就查询时间
我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?
我有一个清单如下: 我想做的是遍历mylist并生成如下所示的新列表: 换句话说,制作一个列表列表,其中每个列表包含初始列表条目的唯一组合,这样一个字母在结果列表的每个条目中不会出现两次。而且,每次将一个条目添加到result中时,我们都从初始列表的可用组合集合中抽象出它的子元素。(我猜给出的例子比解释更清楚)。
问题内容: | uId | title | amount | makers | widgets | 1 richard 998 xcorp sprocket 2 swiss 995 ycorp framitz 3 ricky 90 zcorp flobber 4 ricky2 798 xcorp framitz 1 lilrick 390 xcorp sprocket 1 brie 200 mco
问题内容: 我有两个清单说 现在,我想找出List2中是否存在List1的所有元素。在这种情况下,就全部存在。我不能使用子集函数,因为我可以在列表中重复元素。我可以使用for循环来计算List1中每个项目的出现次数,并查看它是否小于或等于List2中的出现次数。有一个更好的方法吗? 谢谢。 问题答案: 当出现次数无关紧要时,您仍可以通过动态创建集合来使用子集功能: 如果需要检查每个元素在第二个列表
问题内容: 我正在尝试打开文件并创建一个列表,其中每行都从文件中读取。 但是由于这样说,这个示例代码给了我一个错误。我这是什么问题 我如何编写代码以增加InFile中每个新行的列表数? 问题答案: 比这容易得多: 这将返回文件中每一行的列表。