我有一个文本文件,其中包含多个报告。每个报告均以文字“ REPORT ID”开头,并具有特定值,即ABCD。对于简单的情况,例如,我只想提取具有ABCD值的那些报告的数据。并且为了复杂起见,我只想提取那些具有TAG1值(第二行)的报表的数据,即1000375351,并且报表值与ABCD相同。
我已经用传统方式做到了。我的decideAndExtract(String line)功能具有所需的逻辑。但是,如何使用Java 9流takeWhile和dropWhile方法来有效地处理它?
try (Stream<String> lines = Files.lines(filePath)) {
lines.forEach(this::decideAndExtract);
}
Run Code Online (Sandbox Code Playgroud)
样本文本文件数据:
REPORT ID: ABCD
TAG1: 1000375351 PR
DATA1: 7399910002 T
DATA2: 4754400002 B
DATA3 : 1000640
Some Lines Here
REPORT ID: WXYZ
TAG1: 1000375351 PR
DATA1: 7399910002 T
DATA2: 4754400002 B
DATA3 : 1000640
Some Lines Here
REPORT ID: ABCD
TAG1: 1000375351 PR
DATA1: 7399910002 T
DATA2: 4754400002 B
DATA3 : 1000640
Some Lines Here
Run Code Online (Sandbox Code Playgroud) 如果地图的大小为 1,则应返回其键。如果它的大小大于 1,则迭代 map 中的值,并且应该返回该键的键,该键对于某个属性具有最大值。下面是我的代码片段。我想用 Java 8 流 api 实现相同的目标。
public MessageType getOrgReversalTargetMti(Map<MessageType, List<TVO>> map) {
MessageType targetMessageType = null;
if (1 == map.size()) {
targetMessageType = map.keySet().iterator().next();
}
else {
long maxNumber = 0;
for (final MessageType messageType : map.keySet()) {
List<TVO> list = map.get(messageType);
long trace = list.get(0).getTrace();
if (trace > maxNumber) {
maxNumber = trace;
targetMessageType = messageType;
}
}
}
return targetMessageType;
}
Run Code Online (Sandbox Code Playgroud) 我想减小地图对象有序列表的大小(删除一些元素)。除非满足某个条件,否则应丢弃 list 的所有对象。当满足该条件时,该列表的所有下一个元素都应保留在列表中。我有以下一段代码。我想对 Java 8 做同样的事情。
public List<Map<String, String>> doAction(List<Map<String, String>> dataVoMap) {
List<Map<String,String>> tempMap = new ArrayList<>();
boolean found = false;
for(Map<String, String> map: dataVoMap){
if(map.get("service_id").equalsIgnoreCase("passed value") || found){
found = true;
tempMap.add(map);
}
}
dataVoMap = tempMap;
return dataVoMap;
}
Run Code Online (Sandbox Code Playgroud)