当前位置: 首页 > 知识库问答 >
问题:

Java流操作

俞博涛
2023-03-14

我有一个对象,“item”,字段为:int:id string:prices

字符串prices包含一个或多个由逗号分隔的价格值。

Map<Integer, Set<List<Integer>>> itemStoresMapIntermediate = items.stream()
            .collect(Collectors.groupingBy(Item::getItemId,Collectors.mapping(Item::getStoresAsIntList, Collectors.toSet())));

getStoresaIntList()从对象中的字符串价格返回价格值列表。

以上当然不是我想要的。

共有1个答案

勾长卿
2023-03-14

如果我没理解错的话...

 Item item1 = new Item(1, "22,23,24");
 Item item2 = new Item(2, "33,34,35");
 Item item3 = new Item(1, "22,57,58");

 Map<Integer, Set<Integer>> map = Stream.of(item1, item2, item3)
            .collect(Collectors.toMap(
                    Item::getId,
                    i -> new HashSet<>(i.getStoresAsIntList()),
                    (left, right) -> {
                        left.addAll(right);
                        return left;
                    }, HashMap::new));

 System.out.println(map); // {1=[22, 23, 24, 57, 58], 2=[33, 34, 35]}
 类似资料:
  • 任何人都可以指向一个官方Java文档,该文档描述了流将调用每个元素的每个“无干扰和无状态”中间操作的次数。 例如: 以上代码当前将调用< code>check方法4次。 在JDK的当前或未来版本中,方法的执行次数是否可能多于或少于从List或任何其他标准JavaAPI创建的流中的元素数量?

  • 我在这里使用的所有方法几乎都是O(1)复杂度,比较器也不太费力,所以这不应该是问题,有什么我可能不知道的东西可以帮助我优化这个流操作吗?也许我用的入口集可以避免...?因为这可能是这里最贵的手术... 编辑1:也许我应该解释一下这个方法背后的想法。它的主要目的是对地图aux进行排序,并返回一个带有排序键的列表(键也被修改了,但这不是主要目的)

  • 因为在过滤2之后,我们还得再找到一个元素来分层极限(2),操作,那么为什么输出不像我解释的那样呢?

  • 注册 点击首页右上角 注册 ,注册成功后 自动登录并跳转至平台"我的场景"; [首页] [注册] [我的场景] 登录 登录成功后获取 当前用户信息并跳转至首页获取 公开场景列表 [登录] [首页] 创建/编辑/预览场景 场景功能: 场景信息:设置场景基本信息,场景名称、场景描述、场景封面、场景视角、场景LOGO、首页展示和场景分享; 图层管理:场景中底图、素材和标绘都会在图层管理中展示,并可编辑删

  • 我一直试图理解和展示Java流如何在引擎盖下实现一种类型的循环融合,从而可以将几个操作融合到一个pass中。 这里的第一个例子是: 具有以下输出(对每一个元素的单一传递融合相当清楚): 所以我的问题是,在调用distinct时,我认为因为它是一个“有状态”的中间操作,所以它不允许在(所有操作的)一次传递过程中单独处理单个元素,这是正确的吗。此外,因为sorted()状态操作需要处理整个输入流以产生