用于以下输入:
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
.
以传统的(旧的)方式尝试。但是,实现应该在Java 8中实现。
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
.
这是我实现的传统方式。如果能在java 8中提供帮助,我们将不胜感激。
发布于 2019-07-30 20:12:21
我想可能是史密斯。就像这个:
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);https://stackoverflow.com/questions/57278615
复制相似问题