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

可以将java stream groupingby返回到此的数组变量吗?

赫连照
2023-03-14

Q.1)嗨,java流的groupingby可以使自己的数组可变吗?

这是实体

public class Test {
   private int id;
   private int itemId;
   private int[] itemIds;
   private boolean filter;
}

这是测试列表样本

{
   test(id=1, itemId=1)
   test(id=1, itemId=2)
   test(id=1, itemId=3)
   test(id=2, itemId=5)
   test(id=2, itemId=11)
}

我想test.id分组

{
   test(id=1, itemIds=[1,2,3])
   test(id=2, itemIds=[5,11])
}

那我该怎么办?

tests.stream().collect(Collectors.groupingBy(Test::getId), ?, ?);

Q.2)如何合并下面两个流代码?

tests.stream().filter(Test::isFilter).anyMatch(t -> {throw new Exception;});
tests.stream().collect(Collectors.groupingBy(Test::getId, ?, ?); // Q1 result

关于这个。。?

tests.stream().filter(Test::isFilter).anyMatch(t -> {throw new Exception;}).collect(Collectors.groupingBy(Test::getId, ?, ?);

Q3)在Q1以上,Q2的流代码的性能优于java的for语法?

提前感谢。:)

共有2个答案

卢志强
2023-03-14

@谢谢你的回答!

谢谢你的回答,这是我的解决方案

tests.stream()
    .peek(t -> {if (Test::isFilter) throw new Exception();})
    .collect(Collectors.groupingBy(Test::getId, Collectors.mapping(Test::getItemId, Collectors.toSet())))
    .forEach((id, itemIdSet) -> {
        if (!somBusiness(id, itemIdSet)) {
            throw new Exception();
        }
    };

你认为呢,我的解决方案。我担心性能低下。

无论如何,我的知识已经升级了!非常感谢。:)

廖永长
2023-03-14

对于分组,假设Test(int id, int itemId, int[]itemIds)等构造函数和流畅的getter,例如id()itemId()itemIds()您可以通过以下方式取消数据展平:

List<Test> unflattenedTests = tests.stream()
   .collect(Collectors.groupingBy(Test::id))
   .entrySet().stream().map(e -> new Test(
       e.getKey().intValue(),
       0,
       e.getValue().stream().mapToInt(Test::itemId).toArray()
    ))
    .collect(Collectors.toList());

至于合并你的过滤器

List<Test> unflattenedTests = tests.stream()
   .peek(t -> { if (t.isFilter()) throw new RuntimeException(); })
   .collect(...
 类似资料:
  • 问题内容: 我想知道是否存在一种实现类似于map getter的功能的方法:它返回返回值作为第一个参数,(可选地分配)第二个值作为第二个参数。因此,我需要可以通过以下方式调用的函数: 问题答案: 不,它无法完成,唯一的选择是返回一个指针并检查它是否为nil。

  • 问题内容: 直到今天,我还没有真正考虑过这一点,但是在网上搜索之后,我什么都没找到。也许我不是在搜索中说正确的话。 给定一个数组(是否具有多个维度): 当var_dumped时: 面临的挑战是:将数组重新编译为适用于PHP的可用数组的最佳优化方法是什么?就像一个功能。数据是在浏览器中作为输出全部显示在一行上,还是包含换行符作为输出到终端。 这只是正则表达式的问题吗?还是有其他方法?我正在寻找创造力

  • 问题内容: 除了使用关键字调用构造函数时,Java语言中的语句可以返回值的确切情况是什么? 例: 如果我没记错的话,如果它是一个非函数原语,将被返回。否则返回。这个对吗? 换句话说,什么值可以引起? 问题答案: 确切的条件在内部属性上进行了描述,该属性由操作员使用: 来自ECMA-262第3条。版本规格: 13.2.2 调用对象的属性时,将执行以下步骤: 创建一个新的本机ECMAScript对象。

  • 问题内容: java中有什么方法可以返回新数组而不先将其分配给变量?这是一个例子: 我想做这样的事情,但是不起作用: 问题答案: 即使不将其分配给变量,您仍然需要创建该数组。试试这个: 您的代码示例无效,因为编译器一方面仍然需要知道要通过静态初始化创建的类型。

  • 问题内容: 说我有以下代码: 在这种情况下,有什么办法可以使调用返回错误? 我想知道,部分原因是出于好奇,另一部分是考虑是否需要担心该错误检查。 问题答案: 由于任何有效值都是有效键,而且也是JSON中的有效值(有关详细信息,请参阅JSON键名中的哪些字符有效/无效?,因此从理论上讲,它不会返回任何错误。 如果发生内存不足错误,则不会返回错误,您的应用将终止并显示错误代码。 由于Go将值存储为其U

  • 问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案: