首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Java 8特性获得预期的输出?

如何使用Java 8特性获得预期的输出?
EN

Stack Overflow用户
提问于 2019-07-30 19:13:50
回答 1查看 63关注 0票数 1

用于以下输入:

INPUT1 =“0.00\x{e76f}\x{e76f}0.10”;

"404,671.00|0.00|0.00|417,975.64|0.00|0.00|417,353.81|0.00|0.00|418,338.38|0.00|0.00|418,908.39||";= INPUT2

"404,671.00|0.00|0.00|417,975.64|0.00|0.00|417,353.81|0.00|0.00|418,338.38|0.00|0.00|418,908.39";= INPUT3

"20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00";= INPUT4

"20181221|20181227|20190128|20190227|20190327|20190429|20190528|20190627|20190729|20190827|20190927|20191028|20191127|20191227|20200127|20200227";= INPUT5

输出应该如下所示:

##No,Input5,Input5,Input4,Input2,Input2,Input1,Input1,input3 3

  • 1|20181221|20,500,000.00|404,671.00|0.00|404,671.00
  • 2\x{e76f}20181227\x{e76f}20,500,000.00

.

以传统的(旧的)方式尝试。但是,实现应该在Java 8中实现。

代码语言:javascript
复制
public class FormatterDemo {
    public static String INPUT1 = "0.00|0.00|0.00|0.00|0.00|0.00|0.00||0.10";
    public static String INPUT2 = "404,671.00|0.00|0.00|417,975.64|0.00|0.00|417,353.81|0.00|0.00|418,338.38|0.00|0.00|418,908.39||";
    public static String INPUT3 = "404,671.00|0.00|0.00|417,975.64|0.00|0.00|417,353.81|0.00|0.00|418,338.38|0.00|0.00|418,908.39";
    public static String INPUT4 = "20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00|20,500,000.00";
    public static String INPUT5 = "20181221|20181227|20190128|20190227|20190327|20190429|20190528|20190627|20190729|20190827|20190927|20191028|20191127|20191227|20200127|20200227";
    public static String REGEX_PATTERN = "\\|";

    public static void main(String[] args) {

        String[] input1SplitStr = INPUT1.split(REGEX_PATTERN);
        String[] input2SplitStr = INPUT2.split(REGEX_PATTERN);
        String[] input3SplitStr = INPUT3.split(REGEX_PATTERN);
        String[] input4SplitStr = INPUT4.split(REGEX_PATTERN);
        String[] input5SplitStr = INPUT5.split(REGEX_PATTERN);

        int maxSizeValue = findMaxValue(input1SplitStr.length, input2SplitStr.length, input3SplitStr.length,
                input4SplitStr.length, input5SplitStr.length);

        for (int i = 1; i <= maxSizeValue; i++) {
            String input5Value = (i <= input5SplitStr.length && input5SplitStr[i - 1] != null)
                    ? input5SplitStr[i - 1]
                    : "";
            String input4Value = (i <= input4SplitStr.length && input4SplitStr[i - 1] != null)
                    ? input4SplitStr[i - 1]
                    : "";
            String input2Value = (i <= input2SplitStr.length && input2SplitStr[i - 1] != null)
                    ? input2SplitStr[i - 1]
                    : " ";
            String input1Value = (i <= input1SplitStr.length && input1SplitStr[i - 1] != null)
                    ? input1SplitStr[i - 1]
                    : " ";

            String input3Value = (i <= input3SplitStr.length && input3SplitStr[i - 1] != null)
                    ? input3SplitStr[i - 1]
                    : " ";

            System.out.println(i + "|" + input5Value + "|" + input4Value + "|" + input2Value + "|" + input1Value
                    + "|" + input3Value);
        }
    }

    private static int findMaxValue(int... lengths) {
        int maxLength = Integer.MIN_VALUE;
        for (int i : lengths) {
            if (i > maxLength) {
                maxLength = i;
            }
        }
        return maxLength;
    }
}

预期/当前输出:

No|input5|input4|input2|input1|input3

  • 1|20181221|20,500,000.00|404,671.00|0.00|404,671.00
  • 2\x{e76f}20181227\x{e76f}20,500,000.00
  • 3\x{e76f}20190128\x{e76f}20,500,000.00
  • 4|20190227|20,500,000.00|417,975.64|0.00|417,975.64
  • 5\x{e76f}20190327\x{e76f}20,500,000.00\x{e76f}0.00。

.

这是我实现的传统方式。如果能在java 8中提供帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 20:12:21

我想可能是史密斯。就像这个:

代码语言:javascript
复制
List<String[]> data = Stream.of(INPUT5, INPUT4, INPUT3, INPUT2, INPUT1)
                            .map(in -> in.split(REGEX_PATTERN))
                            .collect(Collectors.toList());

IntSupplier getMaxLength = () -> data.stream().mapToInt(arr -> arr.length).max().orElse(0);
BiFunction<String[], Integer, String> valueAt = (arr, i) -> Optional.ofNullable(i < arr.length ? arr[i] : null).orElse("");

List<String> lines = IntStream.range(0, getMaxLength.getAsInt())
                              .mapToObj(i -> {
                                  Stream<String> s1 = Stream.of(String.valueOf(i + 1));
                                  Stream<String> s2 = data.stream().map(arr -> valueAt.apply(arr, i));
                                  return Stream.concat(s1, s2).collect(Collectors.joining("|"));
                              }).collect(Collectors.toList());

lines.forEach(System.out::println);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57278615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档