gpt4 book ai didi

java-8 - 合并两个文本输入文件,文件的每一行一个接一个。查看示例

转载 作者:行者123 更新时间:2023-12-01 00:26:10 24 4
gpt4 key购买 nike

我试图使用 java 8 解决一个问题,我已经使用简单的 for 循环解决了这个问题。但是我不知道如何做到这一点。
问题是 :

File1 : 
1,sdfasfsf
2,sdfhfghrt
3,hdfxcgyjs

File2 :
10,xhgdfgxgf
11,hcvcnhfjh
12,sdfgasasdfa
13,ghdhtfhdsdf

输出应该像
1,sdfasfsf
10,xhgdfgxgf
2,sdfhfghrt
11,hcvcnhfjh
3,hdfxcgyjs
12,sdfgasasdfa
13,ghdhtfhdsdf

我已经有了这个基本工作,

核心逻辑是:
List<String> left  = readFile(lhs);
List<String> right = readFile(rhs);
int leftSize = left.size();
int rightSize = right.size();
int size = leftSize > rightSize? leftSize : right.size();
for (int i = 0; i < size; i++) {
if(i < leftSize) {
merged.add(left.get(i));
}
if(i < rightSize) {
merged.add(right.get(i));
}
}
  • MergeInputs.java
  • UnitTest
  • 输入文件位于同一个 repo 的 src/test/resources/com/linux/test/merge/list(只允许发布两个链接)

  • 但是,我吹嘘我可以使用流轻松做到这一点,现在我不确定这是否可以做到。

    非常感谢帮助。

    最佳答案

    您可以简化操作以减少每个元素的条件:

    int leftSize = left.size(), rightSize = right.size(), min = Math.min(leftSize, rightSize);
    List<String> merged = new ArrayList<>(leftSize+rightSize);
    for(int i = 0; i < min; i++) {
    merged.add(left.get(i));
    merged.add(right.get(i));
    }
    if(leftSize!=rightSize) {
    merged.addAll(
    (leftSize<rightSize? right: left).subList(min, Math.max(leftSize, rightSize)));
    }

    然后,您可以通过流操作替换第一部分:
    int leftSize = left.size(), rightSize = right.size(), min = Math.min(leftSize, rightSize);

    List<String> merged=IntStream.range(0, min)
    .mapToObj(i -> Stream.of(left.get(i), right.get(i)))
    .flatMap(Function.identity())
    .collect(Collectors.toCollection(ArrayList::new));
    if(leftSize!=rightSize) {
    merged.addAll(
    (leftSize<rightSize? right: left).subList(min, Math.max(leftSize, rightSize)));
    }

    但它并不比循环变体简单。由于其预先设定的列表,循环变体可能更有效。

    将这两个操作合并到一个流操作中会更加复杂(甚至可能效率更低)。

    关于java-8 - 合并两个文本输入文件,文件的每一行一个接一个。查看示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760377/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com