使用java读取行并映射过滤数据[关闭]

2024-04-29

public class Reader {
        public static void main(String[] args) throws IOException, ParseException {
            BufferedReader reader;
            String animalName="cat";
            String animal = null;
            try {
                reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream("C:/dila.txt")));
                Map<String, Integer> result = new LinkedHashMap<String, Integer>();
                Map<String, Integer> result2 = new LinkedHashMap<String, Integer>();

                while (reader.ready()) {
                    String line = reader.readLine();
/split a line with spaces/
                    String[] values = line.split(",");
                    String key = null;                 
                    if(values[1].compareTo(animalName)==0){
                    key = values[0];
                    animal=""+values[1].compareTo(animalName);
                    int sum = 0;
                    int count = 0;
/get a last counter and sum/
                    if (result.containsKey(key)) {
                        sum = result.get(key);
                        count = result2.get(key);
                    } else{
                    }
 /increment sum a count and save in the map with key/
                    result.put(key, sum + Integer.parseInt(values[2]));
                    result2.put(key, count + 1);
                }
                }

 /interate and print new output/
                for (String key : result.keySet()) {
                    Integer sum = result.get(key);
                    Integer count = result2.get(key);
                    System.out.println(key +"   "+animalName+ " " + sum + "\t" + count);
                }
                reader.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
  • 我有以下文本文件
    11/2/2010,猫,6
    11/2/2010,猫,3
    11/2/2010,狗,4
    11/2/2010,猫,11
    11/3/2010,猫,1
    11/3/2010,狗,3
    11/3/2010,猫,8
    2010年11月3日,猫,80

  • 上面的代码当前正在打印这个汇总数据
    2010 年 11 月 2 日    猫    20    3
    2010 年 11 月 3 日    猫    104    4
    2010 年 11 月 4 日    猫    26    2

  • 我需要帮助打印如下所示的摘要
    11/01/2010
    2010 年 11 月 2 日    猫    20    3
    2010 年 11 月 3 日    猫    104    4
    2010 年 11 月 4 日    猫    26    2
    11/05/2010
    11/06/2010
    11/07/2010
    11/08/2010
    11/09/2010
    2010年11月10日
    2010年11月11日
    2010年11月12日
    2010年11月13日
    2010年11月14日
    2010年11月15日
    2010年11月16日
    2010年11月17日
    2010年11月18日
    2010年11月19日
    2010年11月20日
    2010年11月21日
    2010年11月22日
    2010年11月23日
    2010年11月24日
    2010年11月25日
    2010年11月26日
    2010年11月27日
    2010年11月28日
    2010年11月29日
    2010年11月30日

我有大量数据与“,”分开。所以我想读取行并拆分。我已经做到了。但我的要求是上面显示的结果。


下面是执行此操作的代码。我正在寻求 google-guava 库的帮助,因为它可以帮助我编写更少的代码;-)。如果你只想使用纯java,那么你也可以修改代码,如果逻辑需要一些调整,那么看看 processLine(...) 方法,这就是更改的地方

好吧,我看到的唯一缺少的代码是按排序顺序打印不属于输入文件的日期的空数据。这很简单,交给你吧。这是提示:将日期加 1 并循环直到月底 https://stackoverflow.com/questions/4533446/increment-date-by-1-loop-until-end-of-the-month

我已经运行了您的示例文件,它打印了以下摘要

11/3/2010   cat 89  3
11/3/2010   dog 3   1
11/2/2010   dog 4   1
11/2/2010   cat 20  3



import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import com.google.common.base.CharMatcher;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Maps;
import com.google.common.io.Files;
import com.google.common.io.LineProcessor;

public class AnimalSummaryBuilder
{
    private static final Splitter SPLITTER = Splitter.on(CharMatcher.anyOf(","));

    private static final Joiner JOINER = Joiner.on("\t");

    @SuppressWarnings("unchecked")
    public static void main(final String[] args) throws Exception
    {
        @SuppressWarnings("rawtypes")
        Map<Animal, Summary> result = Files.readLines(new File("c:/1.txt"), Charsets.ISO_8859_1, new LineProcessor() {

            private final Map<Animal, Summary> result = Maps.newHashMap();

            public Object getResult()
            {
                return result;
            }

            public boolean processLine(final String line) throws IOException
            {
                Iterator<String> columns = SPLITTER.split(line).iterator();

                String date = columns.next();
                String name = columns.next();
                int value = Integer.valueOf(columns.next()).intValue();

                Animal currentRow = new Animal(date, name);

                if (result.containsKey(currentRow))
                {
                    Summary summary = result.get(currentRow);
                    summary.increaseCount();
                    summary.addToTotal(value);
                }
                else
                {
                    Summary initialSummary = new Summary();
                    initialSummary.setCount(1);
                    initialSummary.setTotal(value);
                    result.put(currentRow, initialSummary);
                }
                return true;
            }
        });

        for (Map.Entry<Animal, Summary> entry : result.entrySet())
        {
            Animal animal = entry.getKey();
            Summary summary = entry.getValue();
            System.out.println(JOINER.join(animal.date, animal.name, summary.total, summary.count));
        }
    }

    final static class Animal
    {
        String date;

        String name;

        public Animal(final String date, final String n)
        {
            this.date = date;
            this.name = n;
        }

        @Override
        public int hashCode()
        {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((date == null) ? 0 : date.hashCode());
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }

        @Override
        public boolean equals(Object obj)
        {
            if (this == obj)
            {
                return true;
            }
            if (obj == null)
            {
                return false;
            }
            if (!(obj instanceof Animal))
            {
                return false;
            }
            Animal other = (Animal) obj;
            if (date == null)
            {
                if (other.date != null)
                {
                    return false;
                }
            }
            else if (!date.equals(other.date))
            {
                return false;
            }
            if (name == null)
            {
                if (other.name != null)
                {
                    return false;
                }
            }
            else if (!name.equals(other.name))
            {
                return false;
            }
            return true;
        }

    }

    final static class Summary
    {
        private int total;

        private int count;

        void setTotal(int value)
        {
            total = value;
        }

        void setCount(int i)
        {
            count = i;
        }

        void increaseCount()
        {
            count++;
        }

        void addToTotal(int valueToAdd)
        {
            total += valueToAdd;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用java读取行并映射过滤数据[关闭] 的相关文章

  • 如何在测试套件中定义 JUnit 方法规则?

    我有一个类 它是 JUnit 测试类的 JUnit 套件 我想定义一个规则on the suite 这是可以做到的 但需要做一些工作 您还需要定义自己的 Suite 运行程序和测试运行程序 然后在测试运行程序中重写 runChild 使用以
  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • 无法加载 jar 文件的主类

    我使用 Eclipse IDE 开发了一个应用程序 创建应用程序后 我以 jar 格式导出项目 当我尝试运行此 jar 文件时 出现错误 无法加载主类 请帮忙 当您将项目导出为 jar 时 请参阅此所以问题 https stackoverf
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 打印包含 JBIG2 图像的 PDF

    请推荐一些库 帮助我打印包含 JBIG2 编码图像的 PDF 文件 PDFRenderer PDFBox别帮我 这些库可以打印简单的 PDF 但不能打印包含 JBIG2 图像的 PDF PDFRenderer尝试修复它 根据 PDFRedn
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐

  • App Engine、PIL 和叠加文本

    我正在尝试在 GAE 上的图像上覆盖一些文本 现在他们公开了 PIL 库 这应该不是问题 这就是我所拥有的 它有效 但我不禁认为我应该直接写入背景图像 而不是创建单独的覆盖图像然后合并 我可以用吗Image frombuffer http
  • mcrypt_crypt 的替代方案?

    根据 php 7 0 mcrypt decrypt 已被弃用 我有以下代码 intSize mcrypt get iv size MCRYPT RIJNDAEL 256 MCRYPT MODE ECB strSize mcrypt crea
  • Swift 中的 StrongLoop 环回示例

    我正在尝试在 Swift 中实现示例 LoopBack iOS 应用程序 创建 LoopBack iOS 应用程序 第 1 部分 http docs strongloop com display DOC Creating a LoopBac
  • MYSQL枚举:@rownum,奇偶记录

    我问了一个关于为查询结果创建临时 虚拟 ID 的问题 mysql 和 php 查询结果的临时 虚拟 ID https stackoverflow com questions 4063998 mysql php temporary virtu
  • 使用“容器ip”连接到docker容器

    我在 mac 上运行 docker 我想使用 docker 容器的 ip 不是虚拟机的 ip 连接到它 原因是 Spark 驱动程序将自身注册到容器 IP 172 17 0 2 并且从 mac 运行的客户端尝试连接到该地址 有没有办法从 m
  • HTML 列表元素:将父级宽度分成相等的部分

    我有一个父母 ol 和几个 li 中的项目 ol style display block li style display block Item 1 li li style display block Item 2 li li style
  • 使用 NaN 获取 pandas 系列模式的最快方法

    我需要找到 pandas groupby 对象或单个系列的模式 最常见元素 为此我有以下函数 def get most common srs from collections import Counter import numpy as n
  • 如何在 R 中按组对列进行排序

    我有一个 data frame 比如 df 如下所示 Hospital Name State Mortality Rate hospital 1 AA 0 2 hospital 2 AA 0 3 hospital 3 BB 0 3 hosp
  • 获取完整的 url,包括哈希后的查询字符串

    如何获得完整URL包括后面的字符串参数hash tag 我试着回应 url SERVER REQUEST URI echo url 之后的字符串hash tag不会读 佩卡的评论应该是一个答案 hash标签后面的字符串参数不发送到服务器 它
  • “以下对象被‘package:xxx’屏蔽”是什么意思?

    当我加载包时 我收到一条消息 The following object is masked from package xxx 例如 如果我加载testthat http www rdocumentation org packages tes
  • Haskell 长度函数实现

    我正在学习 Haskell 编程 我试图理解列表是如何工作的 因此我尝试编写两个可能的length功能 myLength a gt Integer myLength foldr x gt 1 0 myLength1 a gt Integer
  • 如何将 Angular2 用作非 SPA?

    我刚刚开始使用 Angular2 发现网上可以找到的所有教程都只解释了如何为单页应用程序 SPA 设置 Angular2 然而 对于我网站的主页 我仍然想使用 PHP 并且只在登录 注册 联系等几个地方使用 Angular2 如何初始化联系
  • 字典条目被覆盖? [复制]

    这个问题在这里已经有答案了 我发现一些输入没有存储在 Python 3 的字典中 运行这段代码 N int input How many lines of subsequent input graph for n in range N st
  • 如何在 if () 语句中声明变量? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 的条件或控制语句中声明和初始化变量 https stackoverflow com questions 1516919 declaring and initializing a variabl
  • CoreBluetooth XPC 连接无效

    public class BLE NSObject CBCentralManagerDelegate var centralManager CBCentralManager public override init super init s
  • 优化Gson反序列化

    优化反序列化的最佳方法是什么 我目前正在使用标准 Gson toJson 和 Gson fromJson 方法来序列化和反序列化一些复杂对象 我希望尽可能减少反序列化时间 如果重要的话 我的最复杂的对象包含 43 个变量 如果你想使用 Gs
  • 为什么这个多处理代码会失败? [复制]

    这个问题在这里已经有答案了 def sample pass Process target sample start Process target sample start 上面的代码失败并出现错误 已尝试在当前进程之前启动新进程 进程已完成
  • 选择 G 元素内的路径并更改样式

    本质上 我试图让除悬停的路径之外的所有路径都变成灰色 而选择的路径则保持其原始颜色 我已经能够将所有其他路径变成灰色 但是我在使用 select this 函数并实际访问我想要更改样式的路径时遇到了问题 看来我实际上已经成功地找到了 g 组
  • 如何在网格视图中突出显示文本的结果? [复制]

    这个问题在这里已经有答案了 可能的重复 如何突出显示某个单词 https stackoverflow com questions 9546761 how can i highlight a word 我有一个网格视图和一个文本框 用于从列中
  • 使用java读取行并映射过滤数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions publi