java - 过滤并使用 txt 文件中的文本

标签 java list dictionary

我想对其进行过滤,以便它只使用 PART 和 FUNCTION 的每个不同组合的最新信息,这样我最终只会得到每个组合的少数结果,而不是数千个过时的结果。 这里的ID是基于时间的。

这是我目前所拥有的:

    while((line = br.readLine())!= null){ 
        info = line.split(",");

        Map<String,String> qgi=new HashMap<String,String>();

        qgi.put("ID",info[0]);
        qgi.put("FUNCTION",info[1]);
        qgi.put("PART",info[2]);
        qgi.put("STATE",info[3]);
        sourceList.add(qgi);
    }

    for (int i = 0, len = sourceList.size(); i < len; i++) {
        Map<String,String> gqi =(Map) sourceList.get(i);

        if ( gqi.get("PART").equals("chw") && gqi.get("FUNCTION").equals("diskusage") && gqi.get("ID").equals("20181122125601"))//Get highest value with those parameters
        { 
            resultList.add(gqi);
        }
    }

因此,目前我的 ID 等于特定日期和时间,并且我希望它成为该特定组合(chw 和 diskusage)的最高 ID。

我基本上想做类似的事情

if(a.get("b").equals("something") && a.get("c").equals("something") && thisCombinationsID >= everyOtherIDWithThisCombination{
    resultList.add(a);
}

最佳答案

创建一个类RowKey ,带有 part和一个 function ,以及适当的equalshashCode覆盖(IDE 可以为您生成)。

创建一个类Row ,带有 rowKey (类型 RowKey ),一个 id和一个 state

创建 Map<RowKey, Row>对于每个行键,包含具有最大 ID 的行(最初为空)。

遍历文件的各行。为每一行创建一个 Row 实例。

然后检查映射中是否已存在该行键的条目。如果不是,或者新行的 ID 大于现有行,则将新行存储在映射中。 Map.merge可以帮助做到这一点。

最后, map 的值包含您想要的内容。

该实现留给读者作为练习。

关于java - 过滤并使用 txt 文件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481692/

相关文章:

Prolog中的ListsfromList函数

python - 将条目添加到列表的开头并删除最后一个

python - 获取列表中的字典,其中键为 :value pairs are in another list of dictionaries

c++ - 在 5d map C++ 中查找项目

java - 分析通过 JNI 调用运行的 Java

java - 应该使用什么来代替 sun.net.www.protocol.jar.Handler?

Java:时区为什么不同的时区以毫秒为单位给出相同的值

java - Scala 枚举可以像 Java 一样映射到整数吗?

python - 在列表理解中将字符串添加到字典

c# - 如何使用 linq 将 'Y' 或 'N' 值转换为 bool 值?