小编Tis*_*ash的帖子

Java 9 takeWhile和dropWhile读取和跳过某些行

我有一个文本文件,其中包含多个报告。每个报告均以文字“ 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)

java java-stream java-9

6
推荐指数
2
解决办法
208
查看次数

在 Java 8 计算其值后返回映射键的方法

如果地图的大小为 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)

java java-8 java-stream

5
推荐指数
1
解决办法
80
查看次数

使用 Java 8 流减少列表的大小

我想减小地图对象有序列表的大小(删除一些元素)。除非满足某个条件,否则应丢弃 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)

java java-8 java-stream

5
推荐指数
1
解决办法
1245
查看次数

标签 统计

java ×3

java-stream ×3

java-8 ×2

java-9 ×1