qiyadeng

专注于Java示例及教程
posts - 84, comments - 152, trackbacks - 0, articles - 34

本文介绍,如果把Java Project转换为Java Web Project,应该在多数的Eclipse的版本都类似。

1.Java Project

一个Java Projec,在Eclipse中显示的是一个“J”的蓝色文件夹。

2.Project Facets

右键项目属性Properties,右侧选择菜单Project Facets,点击converted to faceted form...

勾选dynamic web module

选择下面的further configuration available

项目中的Web目录和设置保持一致。

3.Java Web Project

这样你就转换到了Java Web Project。

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: Eclipse中Java Project转换为Java Web Project


posted @ 2013-03-24 21:58 qiyadeng 阅读(7523) | 评论 (4)编辑 收藏

1.新建Project

新建Java Project,并把mongo-java-driver驱动加入到项目bulid path中,如果你使用的是maven增加依赖。


      <dependency>
          
<groupId>org.mongodb</groupId>
          
<artifactId>mongo-java-driver</artifactId>
          
<version>2.10.1</version>
      
</dependency>

2.连接上MongoDB

//>2.10版本
MongoClient mongo = new MongoClient( "localhost" , 27017 );

//老版本  
Mongo mongo = new Mongo("localhost"27017);

如果需要验证,需要输入用户名和密码


    MongoClient mongoClient = new MongoClient();
    DB db 
= mongoClient.getDB("database name");
    
boolean auth = db.authenticate("username""password".toCharArray());
3.MongoDB数据库

得到MongoDB中的数据库,如果数据库名不存在,MongoDB会自动创建


DB db = mongo.getDB("database name");
显示所有的数据库
    List<String> dbs = mongo.getDatabaseNames();
    
for(String db : dbs){
        System.out.println(db);
    }
4.MongoDB Collection(MongoDB表)

得到数据库中的表

    DB db = mongo.getDB("testdb");
    DBCollection table 
= db.getCollection("user");
显示数据库中的所有表
    DB db = mongo.getDB("testdb");
    Set
<String> tables = db.getCollectionNames();
 
    
for(String coll : tables){
        System.out.println(coll);
    }
5.插入、查找、更新、删除操作

插入数据,向Collection(表)中插入一个Document

    DBCollection table = db.getCollection("user");
    BasicDBObject document 
= new BasicDBObject();
    document.put(
"name""qiyadeng");
    document.put(
"age"30);
    document.put(
"createdDate"new Date());
    table.insert(document);
更新Document中的name="qiyadeng.com"
	
    DBCollection table = db.getCollection("user");

     BasicDBObject query 
= new BasicDBObject();
    query.put(
"name""qiyadeng");

    BasicDBObject newDocument 
= new BasicDBObject();
    newDocument.put(
"name""qiyadeng.com");

    BasicDBObject updateObj 
= new BasicDBObject();
    updateObj.put(
"$set", newDocument);
 
    table.update(query, updateObj);
从Collection中查找name="qiyadeng.com"的Document
    DBCollection table = db.getCollection("user");
 
    BasicDBObject searchQuery 
= new BasicDBObject();
    searchQuery.put(
"name""qiyadeng.com");
 
    DBCursor cursor 
= table.find(searchQuery);
 
    
while (cursor.hasNext()) {
        System.out.println(cursor.next());
    }
删除name="qiyadeng"的Document
    DBCollection table = db.getCollection("user");
 
    BasicDBObject searchQuery 
= new BasicDBObject();
    searchQuery.put(
"name""qiyadeng.com");
 
    table.remove(searchQuery);

6.完整的例子
package com.qiyadeng.mongodb;


import java.util.Date;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;

public class MongoDBSample {

    
public static void main(String[] args) throws Exception{
             
            
/**** Connect to MongoDB ****/
            
//2.10.0后,使用MongoClient
            MongoClient mongo = new MongoClient("localhost"27017);
         
            
/**** Get database ****/
            
// if database doesn't exists, MongoDB will create it for you
            DB db = mongo.getDB("testdb");
         
            
/**** Get collection / table from 'testdb' ****/
            
// if collection doesn't exists, MongoDB will create it for you
            DBCollection table = db.getCollection("user");
         
            
/**** Insert ****/
            
// create a document to store key and value
            BasicDBObject document = new BasicDBObject();
            document.put(
"name""qiyadeng");
            document.put(
"age"30);
            document.put(
"createdDate"new Date());
            table.insert(document);
         
            
/**** Find and display ****/
            BasicDBObject searchQuery 
= new BasicDBObject();
            searchQuery.put(
"name""qiyadeng");
         
            DBCursor cursor 
= table.find(searchQuery);
         
            
while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
         
            
/**** Update ****/
            
// search document where name="qiyadeng" and update it with new values
            BasicDBObject query = new BasicDBObject();
            query.put(
"name""qiyadeng");
         
            BasicDBObject newDocument 
= new BasicDBObject();
            newDocument.put(
"name""qiyadeng.com");
         
            BasicDBObject updateObj 
= new BasicDBObject();
            updateObj.put(
"$set", newDocument);
         
            table.update(query, updateObj);
         
            
/**** Find and display ****/
            BasicDBObject searchQuery2 
                
= new BasicDBObject().append("name""qiyadeng.com");
         
            DBCursor cursor2 
= table.find(searchQuery2);
         
            
while (cursor2.hasNext()) {
                System.out.println(cursor2.next());
            }
    }
}


输出

"_id" : { "$oid" : "51444c88874c79654063356b"} , "name" : "qiyadeng" , "age" : 30 , "createdDate" : { "$date" : "2013-03-16T10:42:16.555Z"}}
"_id" : { "$oid" : "51444c88874c79654063356b"} , "age" : 30 , "createdDate" : { "$date" : "2013-03-16T10:42:16.555Z"} , "name" : "qiyadeng.com"}

使用mongo验证创建的数据库testdb,collection user是否存在。


原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: Java和MongoDB之Hello World



posted @ 2013-03-19 22:17 qiyadeng 阅读(2165) | 评论 (0)编辑 收藏

本文介绍如何安装在windows 7中安装MongoDB。
注:MongoDB并不像Windows上安装其他软件,只需要下载Zip包并解压,然后配置数据存放目录并启动即可。

1.下载MongoDB

从MongoDB官方网站,根据你的平台选择对应的windows的压缩包并解压,本文解压到D:\mongodb\。


注:如果需要在命令行中快速使用MongoDB bin目录下的命令,可以将D:\mongoDB\bin加入到Window环境变量。

2.配置数据文件

在D:\mongodb\创建mongo.config文件,如下(并在d:\mongodb目录下新建data,log文件夹)
##数据存储的位置
dbpath
=D:\mongodb\data
 
##所有的输出位置
logpath
=D:\mongodb\log\mongo.log
 
##日志读写操作
diaglog
=3

3.运行MongoDB Server

在命令控制行,切换到d:\mongodb\bin目录下,使用命令mongod.exe --config d:\mongdb\mongo.config启动MongoDb Server。
D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
all output going to
: D:\mongodb\log\mongo.log

4.连接MongoDB

新开启一个命令行控制窗口,使用mongo.exe连接MongoDB Server.

5.设置MongoDB为Windows服务

在命令行控制窗口,加入--install选项可以把MongoDB安装为Windows服务。
D:\mongodb\bin>mongod.exe --config d:\mongodb\mongo.config
启动MongoDB的命令为:net start MongoDB

停车MongODB的命令为:net stop MongoDB

删除MongoDB的命令为:mongod --remove

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 在Window平台安装MongoDB

posted @ 2013-03-18 22:33 qiyadeng 阅读(2948) | 评论 (1)编辑 收藏

1.设置成为开发者模式

登录微信工作平台,选择高级功能-进入开发模式,成为开发者。需要做如下图配置。URL配置的信息是指,微信的后台服务器把您的用户消息发送到该URL处理。Token是你和微信之间的一个密码,用来验证消息是否是从微信的服务发送而来,而不是其他来攻击你的系统。


现在你还不能设置,在设置时微信会GET请求你设置的URL,已检测接口是否可以使用。只有等你准备好GET方法之后才可以进行设置。


2.实现GET方法

从文档中知道,我们需要实现POST和GET方法,GET方法用于验证微信和你的通讯验证,POST用于消息处理。

新建Servlet HelloWeChat,先实现其中的GET方法


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
// TODO 为了简单起见,先不对消息来源进行校验
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter pw 
= response.getWriter();
        String echo 
= request.getParameter("echostr");
        echo 
= new String(echo.getBytes("ISO-8859-1"),"UTF-8");
        pw.println(echo);
    }
可以在本地使用http://localhost:8080/QiyadengWeb/HelloWeChat?echostr=hello中文,先进行测试,如果没有问题,可以部署到服务器上,然后在微信公众平台进行设置了。

3.实现POST方法

POST方法首先接收到微信公众平台传送过来的XML,从中提取消息发送人和消息内容。更加消息发送内容,你可以增加自己的处理逻辑,最后拼装成回复消息XML,返回给微信公众平台。


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(
"text/html;charset=UTF-8");
        PrintWriter pw 
= response.getWriter();
        String wxMsgXml 
= IOUtils.toString(request.getInputStream(),"utf-8");
        WeChatTextMessage textMsg 
= null;
        
try {
            textMsg 
= getWeChatTextMessage(wxMsgXml);
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        StringBuffer replyMsg 
= new StringBuffer();
        
if(textMsg != null){
            
//增加你所需要的处理逻辑,这里只是简单重复消息
            replyMsg.append("您给我的消息是:");
            replyMsg.append(textMsg.getContent());
        }
        
else{
            replyMsg.append(
":)不是文本的消息,我暂时看不懂");
        }
        String returnXml 
= getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
        pw.println(returnXml);
    }

关于调试,这里推荐一个工具Fiddler,你可以模拟微信的POST消息到你的本地,而不必每次部署到服务器上进行调试。关于Fiddler的POST数据使用方法,可以参考下图标注内容。

4.部署并测试

完成第一步,并和你的公众帐号好进行对话,回复消息没有问题的话,那就恭喜你了

5.依赖库

使用maven的同学,添加以下依赖即可。非maven用户,找到这些库添加到buider path中即可。


      <dependency>
          
<groupId>joda-time</groupId>
          
<artifactId>joda-time</artifactId>
          
<version>2.2</version>
      
</dependency>
      
<dependency>
          
<groupId>org.apache.commons</groupId>
          
<artifactId>commons-io</artifactId>
          
<version>1.3.2</version>
      
</dependency>
      
<dependency>
          
<groupId>com.thoughtworks.xstream</groupId>
          
<artifactId>xstream</artifactId>
          
<version>1.4.3</version>
      
</dependency>
6.完整的代码
package com.qiyadeng.wechat;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * Servlet implementation class HelloWeChat
 
*/
public class HelloWeChat extends HttpServlet {
    
private static final long serialVersionUID = 1L;
       
    
/**
     * 
@see HttpServlet#HttpServlet()
     
*/
    
public HelloWeChat() {
        
super();
    }

    
/**
     * 
@see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     
*/
    
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
// TODO 为了简单起见,先不对消息来源进行校验
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter pw 
= response.getWriter();
        String echo 
= request.getParameter("echostr");
        echo 
= new String(echo.getBytes("ISO-8859-1"),"UTF-8");
        pw.println(echo);
    }

    
/**
     * 
@see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     
*/
    
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(
"text/html;charset=UTF-8");
        PrintWriter pw 
= response.getWriter();
        String wxMsgXml 
= IOUtils.toString(request.getInputStream(),"utf-8");
        WeChatTextMessage textMsg 
= null;
        
try {
            textMsg 
= getWeChatTextMessage(wxMsgXml);
        } 
catch (Exception e) {
            e.printStackTrace();
        }
        StringBuffer replyMsg 
= new StringBuffer();
        
if(textMsg != null){
            
//增加你所需要的处理逻辑,这里只是简单重复消息
            replyMsg.append("您给我的消息是:");
            replyMsg.append(textMsg.getContent());
        }
        
else{
            replyMsg.append(
":)不是文本的消息,我暂时看不懂");
        }
        String returnXml 
= getReplyTextMessage(replyMsg.toString(), textMsg.getFromUserName());
        pw.println(returnXml);
    }
    
    
private WeChatTextMessage getWeChatTextMessage(String xml){
        XStream xstream 
= new XStream(new DomDriver());
        xstream.alias(
"xml", WeChatTextMessage.class);
        xstream.aliasField(
"ToUserName", WeChatTextMessage.class"toUserName");
        xstream.aliasField(
"FromUserName", WeChatTextMessage.class"fromUserName");
        xstream.aliasField(
"CreateTime", WeChatTextMessage.class"createTime");
        xstream.aliasField(
"MsgType", WeChatTextMessage.class"messageType");
        xstream.aliasField(
"Content", WeChatTextMessage.class"content");
        xstream.aliasField(
"MsgId", WeChatTextMessage.class"msgId");
        WeChatTextMessage wechatTextMessage 
= (WeChatTextMessage)xstream.fromXML(xml); 
        
return wechatTextMessage;
    }
    
    
private String getReplyTextMessage(String content, String weChatUser){
        WeChatReplyTextMessage we 
= new WeChatReplyTextMessage();
        we.setMessageType(
"text");
        we.setFuncFlag(
"0");
        we.setCreateTime(
new Long(new Date().getTime()).toString());
        we.setContent(content);
        we.setToUserName(weChatUser);
        we.setFromUserName(
"shanghaiweather");//TODO 你的公众帐号微信号
        XStream xstream = new XStream(new DomDriver()); 
        xstream.alias(
"xml", WeChatReplyTextMessage.class);
        xstream.aliasField(
"ToUserName", WeChatReplyTextMessage.class"toUserName");
        xstream.aliasField(
"FromUserName", WeChatReplyTextMessage.class"fromUserName");
        xstream.aliasField(
"CreateTime", WeChatReplyTextMessage.class"createTime");
        xstream.aliasField(
"MsgType", WeChatReplyTextMessage.class"messageType");
        xstream.aliasField(
"Content", WeChatReplyTextMessage.class"content");
        xstream.aliasField(
"FuncFlag", WeChatReplyTextMessage.class"funcFlag");
        String xml 
=xstream.toXML(we);
        
return xml;
    }

}

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 微信公众平台开发(二)–简单的聊天机器人

posted @ 2013-03-17 20:41 qiyadeng 阅读(15166) | 评论 (4)编辑 收藏

  开始微信公众平台的开发,我们首先要了解微信平台可以帮助我们做哪些事情?
使用您的公众账号登陆http://mp.weixin.qq.com/,选择菜单--高级功能-开发模式--查看文档,即能看到微信公众平台目前所能开发的功能。

一、通讯机制


公众平台的主要内容是

  • 接受用户发送给您公众账号的消息
  • 给您的用户回复消息

需要特别说明的是,发送消息和回复消失是一个连贯的过程,只能在一个对话中完成。也就是说您的用户不找您说话,您是不能主动发送消息给你的客户(群发是另外一种情况,有次数限制。你也可以申请付费使用微信CRM平台)。所有的发送消息和接受消息,都需要微信平台进行中转。

二、消息类型

下面介绍用户能给您发送的消息类型,也就是目前接受到的消息类型。

1.接受消息类型

  1.1文本消息

  这也是我们平时碰到最多的,可以根据文本中提到的一些关键字,进行判断,判断用户的含义,并进行回复。

  1.2图片消息

  目前通过图片理解用户想表达的意思,还是有较大难度,因此多数的公众账号,会选择忽略图片信息或选择由人工来处理。只能说一句:图片很美,但是我看不懂。

  1.3地理位置消息

  用户把他的位置发给您,这对大多数公众账号来说,是一个重要的信息。可以提供一些基于位置信息的服务,比如酒店预订公众账号,可以给你推荐你周边的酒店。 另外一个补充是,可以在文本消息中分析出位置信息,并加以利用。比如用户输入“南京路步行街”,可以提供用户南京路步行街的相关商户。

  1.4链接消息

  目前还没有看到开发模式中特别有效的使用方法。使用比较多的可能会是购物时或是咨询时,对所谈论的对象进行明确。

  1.5事件推送消息

  当用户进入到和你对话的过程中,可以先和用户打招呼等。这个消息目前只支持4.5版本,且暂时还没有开发。后续可想想的空间很大,比如用户进入到会话之后,摇一摇会发生什么呢?

2.回复消息类型

  2.1文本消息
   这是我们平时发送最多的一类消息,当只需要简单的文字即可回答用户的消息时,可用文本消息。文本消息中可以带有链接地址。

   2.2图文消息
    图文消息,这是我们在推送消息中经常看到的消息格式。每项内容可以点击查看更详细信息(当然你也可以把链接设置为空,使其不能跳转)

   2.3音乐消息
   在你的答复中给用户一个语音消息或是音乐,可以获得不少用户的亲睐。
了解了公众平台的通讯机制和消息类型,接下来,我们开始准备开发环境了。

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 微信公众平台开发(一)

posted @ 2013-03-17 20:36 qiyadeng 阅读(34518) | 评论 (12)编辑 收藏

在类似PHP的项目中,经常会碰到项目开发目录和运行目录不是一个目录的情况。

在window7下面有一个非常好的工具,可以做到自动同步。

如:

 

mklink /J D:\wamp\www\shanghaisales C:\Users\Admin\git\ShanghaiSales\ShanghaiSales

 

 

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: Window7自动目录同步(mklink)

posted @ 2013-03-13 20:49 qiyadeng 阅读(1391) | 评论 (1)编辑 收藏

本文中演示如何通过URLConnection获取Http响应Header信息

1.从响应中获得Header信息

                
                URL obj = new URL("http://www.qiyadeng.com");
                URLConnection conn 
= obj.openConnection();
                Map
<String, List<String>> map = conn.getHeaderFields();
 

2.从响应Header中获取Server信息

 
               Map<String, List<String>> map = conn.getHeaderFields();
                List
<String> server = map.get("Server");
 

完整的示例

package com.qiyadeng.http;

import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
 
public class GetHttpResponseHeader {
 
  
public static void main(String[] args) {
 
        
try {
 
                URL obj 
= new URL("http://www.qiyadeng.com");
                URLConnection conn 
= obj.openConnection();
                Map
<String, List<String>> map = conn.getHeaderFields();
 
                System.out.println(
"显示响应Header信息\n");
 
                
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
                        System.out.println(
"Key : " + entry.getKey() + 
                                           
" ,Value : " + entry.getValue());
                }
 
                System.out.println(
"\n使用key获得响应Header信息 \n");
                List
<String> server = map.get("Server");
 
                
if (server == null) {
                        System.out.println(
"Key 'Server' is not found!");
                } 
else {
                        
for (String values : server) {
                                System.out.println(values);
                        }
                }
 
        } 
catch (Exception e) {
                e.printStackTrace();
        }
 
  }
 
}
 

输出

显示响应Header信息...

Key : null ,Value : [HTTP/1.1 200 OK]
Key : X
-Pingback ,Value : [http://www.qiyadeng.com/xmlrpc.php]
Key : Date ,Value : [Sun, 10 Mar 2013 12:16:26 GMT]
Key : Transfer
-Encoding ,Value : [chunked]
Key : Connection ,Value : [close]
Key : Content
-Type ,Value : [text/html; charset=UTF-8]
Key : Server ,Value : [Apache
/2.2.3 (CentOS)]
Key : X
-Powered-By ,Value : [PHP/5.2.17]
使用key获得响应Header信息 ...

Apache/2.2.3 (CentOS)




原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: Java获取Http响应Header信息

posted @ 2013-03-12 21:40 qiyadeng 阅读(11152) | 评论 (3)编辑 收藏

在.net中也有非常多的日志工具,今天介绍下NLog。NLog特别好的地方就是和Vs(Visual Studio)开发环境的集成。

只需下载(下载地址)安装包,安装之后NLog就会在VS的新建项中增加很多选项,并且在编辑NLog配置文件时也会提供智能提示和校验。

NLog工作主要依赖的是两个文件一个是NLog.dll,另外一个是NLog.config,解下来演示下如何引入和进行配置

1.在你的项目中加入NLog。右击项目,选择添加新项目,选择Empty NLog Configuration,并选择添加(如图)。

vs add new item

(说明:有可能不像官网上说的在NLog的目录下面,在ASP.net Web项目中,会在VB的目录中。)

在非Asp.net项目中,记得把NLog.config文件复制到输出目录(右击NLog.config文件属性)。

2.编辑配置文件NLog.config.

关于配置文件如何编辑有大量的篇幅(https://github.com/nlog/nlog/wiki/Configuration-file),我们这里介绍两种常用的场景。

A)在Vs的输出窗口输出日志,关于这些变量的说明${},请参看文档Configuration Reference。(https://github.com/nlog/nlog/wiki)

 <target name="debugger" xsi:type="Debugger" layout="${logger}::${message}" />

B)以文件形式输出。

<target name="file" xsi:type="File" maxArchiveFiles="30"

            layout
="${longdate} ${logger} ${message}"

            fileName
="${basedir}/logs/log${shortdate}.txt"

            keepFileOpen
="false" />

完整的配置文件例子:

<?xml version="1.0" encoding="utf-8" ?>

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"

      xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"  throwExceptions="true" internalLogFile="d:\internal_log_file.txt" internalLogLevel="Trace" internalLogToConsole="true">

  <targets>

    <target name="debugger" xsi:type="Debugger" layout="${logger}::${message}" />

 

    <target name="file" xsi:type="File" maxArchiveFiles="30"

            layout
="${longdate} ${logger} ${message}"

            fileName
="${basedir}/logs/log${shortdate}.txt"

            keepFileOpen
="false" />

  </targets>

 

  <rules>

    <logger name="*" minlevel="Trace" writeTo="debugger" />

    <logger name="*" minlevel="Trace" writeTo="file" />

  </rules>

</nlog>

3.在程序中使用NLog

在程序中使用就特别简单了,和大多数日志工具类似。

using NLog;
namespace MyNamespace
{
  public class MyClass
  {
    private static Logger logger = LogManager.GetCurrentClassLogger();
  }
}

posted @ 2013-02-27 16:00 qiyadeng 阅读(5043) | 评论 (2)编辑 收藏

本文演示如何使用Collections.frequency和Map来计算重复项出现的次数。(Collections.frequency在JDK 1.5版本以后支持)

package com.qiyadeng.core;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class CountDuplicatedList {
 
    
public static void main(String[] args) {
 
        List list 
= new ArrayList();
        list.add(
"a");
        list.add(
"b");
        list.add(
"c");
        list.add(
"d");
        list.add(
"b");
        list.add(
"c");
        list.add(
"a");
        list.add(
"a");
        list.add(
"a");
 
        System.out.println(
"\n例子1 - 计算'a'出现的次数");
        System.out.println(
"a : " + Collections.frequency(list, "a"));
 
        System.out.println(
"\n例子2 - 计算所有对象出现的次数");
        Set uniqueSet 
= new HashSet(list);
        
for (String temp : uniqueSet) {
            System.out.println(temp 
+ "" + Collections.frequency(list, temp));
        }
 
        System.out.println(
"\n例子3 -用Map来计算对象出现的次数");
        Map map 
= new HashMap();
 
        
for (String temp : list) {
            Integer count 
= map.get(temp);
            map.put(temp, (count 
== null? 1 : count + 1);
        }
        printMap(map);
 
        System.out.println(
"\nMap排序-以key排序");
        Map treeMap 
= new TreeMap(map);
        printMap(treeMap);
 
    }
 
    
public static void printMap(Map map) {
        
for (Map.Entry entry : map.entrySet()) {
            System.out.println(
"Key-value : " + entry.getKey() + ""
                    
+ entry.getValue());
        }
    }
}

输出结果
例子1 - 计算'a'出现的次数
a : 
4
例子2 
- 计算所有对象出现的次数
d: 
1
b: 
2
c: 
2
a: 
4
例子3 
-用Map来计算对象出现的次数
Key
-value : d- 1
Key
-value : b- 2
Key
-value : c- 2
Key
-value : a- 4
Map排序
-以key排序
Key
-value : a- 4
Key
-value : b- 2
Key
-value : c- 2
Key
-value : d- 1

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 计算Java List中的重复项出现次数

posted @ 2013-02-25 22:44 qiyadeng 阅读(3556) | 评论 (0)编辑 收藏

抓紧年前的两天时间,自己开发了一个微信天气预报的自定义接口。做微信公众平台的开发已经不是第一次,这也算是自娱自乐,第一个版本不需要太注重外观,主要注重天气信息。
微信号(shanghaiweather):上海天气预报- 2692296679

image

原创文章,转载请注明: 转载自http://www.qiyadeng.com/

本文链接地址: 微信公众平台-天气预报

posted @ 2013-02-25 13:12 qiyadeng 阅读(1260) | 评论 (0)编辑 收藏

仅列出标题
共9页: 上一页 1 2 3 4 5 6 7 8 9 下一页