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

如何将集合划分为任意大小的分区

笪建章
2023-03-14

我尝试使用Java8Lambda表达式和流来解析一些日志。我有一个巨大的日志文件,运行了一次又一次。我想把它分成不同的集合,每次运行一个集合。我不知道日志在advanced中运行了多少次。为了锻炼我非常虚弱的lambda肌肉,我想在列表中一次完成。

这是我目前的实现:

    List<String> lines = readLines(fileDirectory);

    Pattern runStartPattern = Pattern.compile("INFO: \\d\\d:\\d\\d:\\d\\d: Starting");

    LinkedList<List<String>> testRuns = new LinkedList<>();

    List<String> currentTestRun = new LinkedList<>(); // In case log starts in middle of run
    testRuns.add(currentTestRun);

    for(String line:lines){
        if(runStartPattern.matcher(line).find()){
            currentTestRun = new ArrayList<>();
            testRuns.add(currentTestRun);
        }
        currentTestRun.add(line);
    }
    if(testRuns.getFirst().size()==0){ // In case log starts at a run
        testRuns.removeFirst();
    }

这里基本上类似于TomekRekawek的解决方案,但首先是未知的分区大小。

共有1个答案

归建安
2023-03-14

没有标准方法可以轻松在流API中实现这一点,但我的StreamX库有一个groupRuns方法,可以非常轻松地解决这一问题:

List<List<String>> testLines = StreamEx.of(lines)
        .groupRuns((a, b) -> !runStartPattern.matcher(b).find())
        .toList();

它根据应用于一对相邻元素的谓词对输入元素进行分组。在这里,如果第二行与runStartPattern匹配,我们不想对行进行分组。无论日志是否在运行过程中开始,都可以正常工作。同样,这个特性也适用于并行流。

 类似资料:
  • 如何将整数数组划分为N个子集,使这些子集的和最小? 例如,数组由11个元素组成,我需要其中的6个子集。 子集:<code>{2,1,1,3},{4},}4,3},}3,2},1,2},{3}</code>最小和=7。 另一个答案是:最小和=7。 注意:在分区时,必须保持数字在原始集合中出现的顺序。

  • 我想把引导行分成五列,但设备有12个单元。我怎么能把它分成五个呢?

  • 声明: 给定一个n个整数的集合,将集合分成两个大小为n/2的子集,使两个子集之和的差值尽可能小。若n为偶数,则两个子集的大小必须严格为n/2,若n为奇数,则一个子集的大小必须为(n-1)/2,另一个子集的大小必须为(n+1)/2。 例如,设给定集为 输出子集应为 而且 两个子集的元素和分别为120和121。

  • 问题内容: 默认情况下,对于MySQL服务器上的整个数据库,启用和禁用区分大小写的命令是什么?我知道COLLATE语句,但似乎有必要将其放在运行的每个SQL语句中。是否可以选择全局设置? 问题答案: 您可以在数据库创建和表创建级别上设置排序规则,作为CREATE TABLE 语句的一部分。 要为整个数据库设置排序规则,可以使用: 您还可以通过ALTER DATABASE更改现有数据库上的排序规则。

  • 我有一个“周期”(P)的时间,由开始时间(S)和结束时间(E)表示。我想把P分成大小为D的C块。也就是说, P=C*dr,其中R是余数或剩余时间。 eg. 我想存储和显示所有的块C及其开始时间、结束时间和大小。最后,我想存储并显示剩余的内容。我如何利用乔达的时间做到这一点? API是否提供了简单的方法和类来实现这一点,或者我将不得不想出一条出路? 这个问题是我在这里发布的另一个问题的一小部分

  • 我有两个超类(和),和一个子类。Dog类有一个所有者setter函数(。我在分配和抽象类类型时遇到问题。 阐明想法的代码示例: 假设我需要像这样使用这3个类,并且两个类具有相同的功能。我该怎么做?