`
no_bao
  • 浏览: 315978 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

java使用Map进行分组统计

    博客分类:
  • java
阅读更多
用java读取txt文本,并根据ip段分组合计|后面的值,即ip相同数字累加

127.0.0.1|395
127.0.0.2|390
127.0.0.3|370
127.0.0.4|340
127.0.0.3|339
127.0.0.1|338
127.0.0.5|521

--------------运行结果-------------

127.0.0.5 === 521
127.0.0.3 === 709
127.0.0.4 === 340
127.0.0.2 === 390
127.0.0.1 === 733


-------------------------------

java代码 根据Map中的Key值,进行数值累加


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

 

/**
 * 读取txt文本
 * ip 相等 数字累加
 * @author snail
 *
 */
public class readtxt {
 

    
    /**
     * 根据传递的路径File对象 解析txt
     * @param file
     * @return
     * @author  
     */
    public HashMap<String, Integer> readLogInfo(File file) {
    	HashMap<String, Integer> map = new HashMap<String, Integer>();
         //
        InputStreamReader inputStreamReader = null;
        // 创建文件输入流缓存对象
        BufferedReader bufferedReader = null;
        try {
            if(file!=null){
	            inputStreamReader = new InputStreamReader(new FileInputStream(file),"GBK");
	            bufferedReader = new BufferedReader(inputStreamReader);
	            String lineString ="";
	            String[] strArr=null;
                int value=0;
	            while((lineString = bufferedReader.readLine()) != null){
	            	strArr=lineString.split("\\|");
                    if(map.get(strArr[0])!=null){
                    	value=Integer.parseInt(map.get(strArr[0]).toString())+Integer.parseInt(strArr[1]);
                    }else{
                    	value=Integer.parseInt(strArr[1]);
                    }
                    map.put(strArr[0], value);
	           }

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufferedReader != null) {
                    bufferedReader.close();
                }
                if(inputStreamReader!=null){
                    inputStreamReader.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return map;    
    }	    
    

    
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			// txt 文本路径
			String filePath="E:"+File.separator+"a.txt";
			File file = new File(filePath);
			readtxt rd = new readtxt();
			HashMap<String, Integer> map=rd.readLogInfo(file);
			if(map !=null){
				
				  Set keySet = map.keySet();//返回键的集合 
				  Iterator it = keySet.iterator(); 

				  while(it.hasNext())      //第一种迭代方式取键值 
				  { 
				   Object key = it.next(); 
				   System.out.println(key+" === "+map.get(key)); //根据键来取对应的值 
				  } 
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		


		
		
	}

}


0
1
分享到:
评论
4 楼 no_bao 2014-01-14  
a164906480 写道
不好意思啊,不少东西,我用的时候就是转int的时候光报异常。


是不是文本内容不对?
这块的思路就是使用了map的key值会被覆盖,可以利用这一点,key值相等的话把value值相加,具体可以自己写一下,这个小列子 仅仅是个思路而已
3 楼 a164906480 2014-01-07  
不好意思啊,不少东西,我用的时候就是转int的时候光报异常。
2 楼 a164906480 2014-01-07  
  String[] strArr=null;   
42.                int value=0;   
43.                while((lineString = bufferedReader.readLine()) != null){   
44.                    strArr=lineString.split("\\|");   
45.                    if(map.get(strArr[0])!=null){   
46.                        value=Integer.parseInt(map.get(strArr[0]).toString())+Integer.parseInt(strArr[1]);   
47.                    }else{   
48.                        value=Integer.parseInt(strArr[1]);   
49.                    }   
50.                    map.put(strArr[0], value);   
51.               }   
52.  



这一块是不是少些东西
1 楼 a164906480 2014-01-07  
问一下你后面的数是怎么加的吗

相关推荐

    java集合分组(Guava)

    这个接口是Java 8中Stream API的`groupingBy`函数的一种扩展,允许我们对集合对象进行更复杂的分组操作。`GroupingBy`可以接受一个函数作为参数,这个函数定义了如何从每个元素中提取分组键,然后根据这些键将元素分...

    Java8进行多个字段分组统计的实例代码

    Java8中多字段分组统计是指根据多个字段对数据进行分组和统计,生成相应的统计结果。在本文中,我们将详细介绍Java8中多字段分组统计的实例代码,并对其进行详细的解释。 多字段分组统计的实现 多字段分组统计的...

    java8 集合 多字段 分组 统计个数代码

    这里我们将深入探讨如何使用Java 8的Stream API对集合进行多字段分组和统计个数。 首先,我们有一个`User`实体类,包含了`id`, `userName`, `password`, `age`等字段。这个例子中,我们想要根据`userName`和`age`两...

    JAVA8 stream中三个参数的reduce方法对List进行分组统计操作

    当我们需要对List进行分组统计时,`reduce()`方法的三个参数版本就显得特别有用。本文将深入探讨如何利用这三个参数的`reduce()`方法对List进行分组统计操作。 首先,`reduce()`方法的签名如下: ```java &lt;U&gt; U ...

    java8 stream的分组功能实例介绍

    * 数据分析:可以按照某个或多个条件对数据进行分组,然后进行统计、分析和处理。 * 数据处理:可以按照某个或多个条件对数据进行分组,然后进行数据清洗、转换和处理。 * 报表生成:可以按照某个或多个条件对数据...

    java按照每周分组 改进版

    2. 如何使用Java集合框架(如List, Map)来存储和处理分组后的数据。 3. 数据库查询优化,如SQL的GROUP BY语句与DATE_TRUNC函数结合,按周对数据进行聚合。 4. 如何读取和处理Excel数据,可能使用Apache POI库或者...

    如何用Map对象创建Set对象Java开发Java经验技巧

    在Java编程语言中,Map和Set是两种非常重要的集合类型。Map主要用于存储键值对,而Set则是一个不...在实际开发中,这一技巧常常用于去重、分组、统计等场景。理解并熟练运用这些方法,将有助于提升你的Java编程能力。

    java大作业之词频统计

    在本项目“java大作业之词频统计”中,我们主要关注的是如何使用Java 8的Stream API来实现一个高效且简洁的词频统计程序。这个项目不仅包含了源代码实现,还提供了答辩PPT,方便理解和展示项目的核心思想。下面我们...

    Java分组功能详解.pdf

    在Java编程中,分组是一种常见的数据处理方式,它能够帮助我们将数据按照特定的属性或条件进行归类,便于后续的分析和操作。在Java 8及以后的版本中,Stream API提供了强大的分组功能,这在处理大量数据时尤其有用。...

    java实现英文文档分词

    本实验报告展示了使用java实现英文文档分词的整个过程,涵盖文档读取、分词、词频统计、结果输出等方面的内容。该实验可以帮助读者了解java语言在自然语言处理中的应用,并且提供了一个基本的英文文档分词的实现方式...

    Java8 stream 中利用 groupingBy 进行多字段分组求和案例

    在这个案例中,我们将探讨如何使用`groupingBy`进行多字段分组以及如何实现分组求和。 首先,`groupingBy`的基本用法是根据一个单一的属性将集合元素分组。例如,给定一个包含水果名称的列表,我们可以很容易地按照...

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    在Java中,可以使用`HashMap`或`TreeMap`等数据结构,根据分组键存储对应的值列表,然后对每个分组进行聚合计算。 6. **统计函数计算**:对于COUNT,可以直接统计分组内的元素数量;AVG需要先累加所有值,然后除以...

    Elasticsearch的JAVA操作工具类,包括增删改查的封装

    在Java环境中,与Elasticsearch进行交互通常会使用官方提供的Java REST客户端。本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖...

    java采集数据并分类保存

    此外,为了更好地管理和操作这些数据,开发者可能还使用了`Stream` API,这是Java 8引入的新特性,可以方便地对集合进行过滤、映射、分组等操作。例如,使用`Stream`可以很容易地找出打卡异常的员工,或者计算每个...

    地区码与地区名称相互转换java代码11.zip

    - 数据分析:对带有地区信息的大量数据进行统计分析时,地区码便于快速分组和计算。 总之,"地区码与地区名称相互转换java代码11.zip"是一个实用的工具,可以帮助开发者在处理地理位置相关的项目时提高效率。理解...

    Stream_Java8.pdf

    5. **按薪资是否高于8000进行分组**:使用`partitioningBy`方法进行分组。 ```java Map, List&lt;Employee&gt;&gt; partitionedBySalary = employees.stream() .collect(Collectors.partitioningBy(employee -&gt; employee....

    Java 8 常用语法教程

    如需根据`Rolemenu`的`roleid`属性进行分组,可以使用`groupingBy()`方法。这会返回一个`Map, List&lt;Rolemenu&gt;&gt;`,键是`roleid`,值是对应`roleid`的所有`Rolemenu`对象的列表。 4. 单列求和 Java 8提供了针对不同...

    有关map程序框架(不能下载)

    标签“map”可能指的是MapReduce模型中的“Map”操作,也可能是数据结构中的“Map”或“HashMap”,它在各种编程语言中被广泛使用,如Java的HashMap、C++的std::map等。这些数据结构提供了一种通过键来存储和检索值...

Global site tag (gtag.js) - Google Analytics