使用此标记可以获得与使用Stream API相关的问题。它是在Java 8中引入的,支持对值流进行功能样式的操作,例如集合上的filter-map-reduce管道。
如何解决 SonarQube 主要问题“重构代码以便使用流管道”?
我正在一个Java 17项目中工作,我有以下方法: 公共列表 getUserroles(列表 userRoles){ 返回 userRoles.stream().filter(UserRoleDTO::get...
我有两个 Person 对象列表(List1 和 List2): 公共类人{ 对象 ID id; 私人名单名称; 私有整数年龄; } 我想比较列表,无论在哪里......
我有下面的工作代码,使用一个值进行比较,但想与两个值进行比较。我需要再添加一个过滤器作为“getAddressID”以及 getAction。有人可以帮我...
我有一个包含字符串的列表和另一个包含Java自定义对象的列表。 Java自定义对象: 公共类DeviceKeyDto { 私有字符串设备ID; 私有字符串设备密钥; } 我有一个...
在Java 8中,有没有一种方法可以根据条件在流上应用过滤器, 例子 我有这个流 如果(isAccessDisplayEnabled){ src = (列表 < Source > ) sourceMeta.getAllSour...
我有一个包含字符串的列表和另一个包含Java自定义对象的列表。 Java自定义对象: 公共类DeviceKeyDto { 私有字符串设备ID; 私有字符串设备密钥; } 我有一个...
如何使用 Java Stream API 将一个 Map 映射到另一个 Map?
我正在使用 Stream 学习 Java,我有一个 Map> map1,我想将其映射到 Map> map2。我怎样才能使用 Java 来做到这一点
如何使用Java Stream将一个Map映射到另一个Map?
我正在使用 Stream 学习 Java,我有这个 Map>map1,我想将它映射到这个 Map>map2。我怎样才能特别做到这一点
我有以下方法,它接受 CustomClass 列表并使用流执行过滤器,并根据过滤器的结果在每个步骤中返回。 我想知道是否有办法
Java Collectors.groupingBy,如何收集map中的值,应该按值复制而不是按引用复制
我正在尝试使用名为 myList 的列表创建一个映射,其中键作为 myLlist 中存在的列表对象的名称属性,但下面的方法将对象复制到映射作为按引用复制而不是按值复制
如何使用 Java 8 流 api 从地图列表创建地图的地图
背景 我有一个看起来像这样的地图列表: [ { “姓名”:“A”, “旧”:0.25, “新”:0.3 }, { “姓名”:“...
如何使用 Java Stream API 从文件中读取第一个和最后一个字符串?
例如,我有一个表写入 .txt 文件,例如: 列_A 列_B 单元格_1 单元格_2 单元_3 单元_4 我可以获取单个流管道中的第一行和最后一行吗? 另外,如何...
如何改进此算法以获取 Java 8 或 11 中每个月的工作日数
我想知道如何改进这个非常简单的代码。 该代码非常冗长,并且两个 for 循环绝对不实用或简洁。 我正在考虑使用 Stream。
需要为初学者解释流中的异常:IllegalStateException [重复]
我是java编程的初学者,我刚刚开始使用Streams。我对这段代码有疑问,我不明白如何解决它。我在结果中读到了一些现有的解决方案,但我无法理解......
我正在开发一个Java项目,我必须迭代一个列表并根据该列表中的计算将值放入新映射中。 以下是使用基本 for 循环的工作原理: 地图 我正在开发一个 Java 项目,我必须迭代一个列表,并根据该列表中的计算将值放入新映射中。 这是使用基本 for 循环的工作原理: Map<Long, PickingDetails> pickingDetailsDTOMap = new HashMap<>(); for(int i=0;i<pickingJobModels.size();i++) { pickingDetailsDTOMap.put(pickingJobModels.get(i).getPickListDTO().getReferenceId(),getPickingDetails(pickingJobModels.get(i))); } 但我想用流来做到这一点,所以我这样做了: pickingJobModels.stream().map(pickingJobModel -> pickingDetailsDTOMap.put(pickingJobModel.getPickListDTO().getReferenceId(),getPickingDetails(pickingJobModel))); 但是当我返回那个pickingDetailsDTOMap时,我得到的是空地图。 在这种情况下如何使用流有什么建议吗? 这不是正确的方法。 map 是一个中间操作(即,它被延迟评估)并且您没有终端操作,因此它永远不会被评估。您应该 collect 将数据放入 Map: Map<Long, PickingDetails> pickingDetailsDTOMap = pickingJobModels.stream() .collect(Collectors.toMap(pm -> pm.getPickListDTO().getReferenceId(), pm -> getPickingDetails(pm))); 创建流时,您创建了操作的定义。对于流中传输的每个元素,这些操作将被一个接一个地执行。 这就像设置人员并给他们指示。第一个,流的源有指令:如果站在你右边的下一个人向你请求一个值,请向他们提供此数组、集合或任何流源中的下一个元素。 下面做“map”的人得到指令:每当站在你右边的人向你询问一个值时,你首先向站在你左边的人请求一个值,对该值进行map操作,然后把人交给右边。 排中的最后一个人,终端操作员是唯一收到指令的人:主动向你左边的人询问值并收集这些值。 您向两个人发出指令,但没有执行流的终端操作。 流是从右向左执行的。如果没有终端操作,那么什么也不会发生。
在java流中,是否可以使用在映射范围内的过滤器子句上获得的变量?
我尝试在流的帮助下重现以下行为: 公共列表 getList(param1){ List allObjs = getAll(param1); 列表
我想在 Groovy 中编写以下 Java 代码。 列表 < String > nums = ['a','b'] Map 计数 = nums.parallelStream() .collect( Collectors.groupingBy(k -> k.toLowerCase(),
我有这样的清单: List list = new ArrayList<>(); 列表.add(24); 列表.add(12); 列表.add(0); 列表.add(36); 列表.add(1); 列表.add(99); 我想按升序排序,但必须为 0
我有很多单词。 我想得到所有的单词: 长度超过 5 个字符并且 所有以“a”开头的单词,无论长度如何 如何达到第二个标准? 列表<...
给定这个对象: 公开课菜单{ 私有字符串 ID; 私有字符串匹配代码; 私人名单儿童; //获取器和设置器 /** * 将函数扁平化为递归 给定这个对象: public class Menu { private String id; private String matchCode; private List<Menu> children; //getters and setters /** * Flattened funcition to recursive children list */ public Stream<Menu> flatenned() { return Stream.concat( Stream.of(this), children.stream().flatMap(Menu::flatenned)); } } 我需要过滤 List<Menu> 并删除与给定 matchCode 不匹配的所有(父)项目。我还需要通过同一字段过滤所有子项(此时可以有“N”个子项)(matchCode)。 由于孩子们是一个递归列表结构,我发现方法flatenned可以帮助实现这一点。 (请参阅Konrad Garus:使用 Java 8 流遍历递归数据结构)。 到目前为止我有这个: private List<Menu> filterByMatchRoleCode(List<Menu> menuList) { return menuList.stream() .filter(p -> "string".matches(p.getMatchCode())) .map(c -> c.getChildren() .stream() .map(o -> o.flatenned() .map(Menu::getMatchCode) .filter(v -> "string".matches(v)).collect(Collectors.toList()))); } 此方法filterByMatchRoleCode尝试返回值时会出错。 我错过了什么,或者有不同的方法来解决这个问题吗? 我认为可以更简单。 private List<Menu> filterByMatchRoleCode(List<Menu> menuList) { return menuList.stream() .peek( x -> x.setChildren( filterByMatchRoleCode(x.children))) .filter(p -> "string".matches(p.getMatchCode())) .collect(Collectors.toList()); } 这是一个递归解决方案,复制而不是修改值。 它也不使用扁平流方法。 List<Menu> filterByMatchRoleCode(List<Menu> menuList) { return menuList.stream() .filter(m -> "string".matches(m.getMatchCode())) .map(this::copyWithFilteredChildren) .toList(); } private Menu copyWithFilteredChildren(Menu menu) { Menu filtered = new Menu(); filtered.setId(menu.getId()); filtered.setMatchCode(menu.getMatchCode()); filtered.setChildren(filterByMatchRoleCode(menu.getChildren())); return filtered; }