ArticleTotal atl=new ArticleTotal();
Map cmap1=atl.getArticleByName("/content/zhongZhi",cmsObject,startDate,endDate);
out.println("cmap1:"+cmap1+"<br>");
Map cmap2=atl.getArticleByName("/content/yangZhi",cmsObject,startDate,endDate);
out.println("cmap2:"+cmap2+"<br>");
Map cmap3=atl.getArticleByName("/content/nongZi",cmsObject,startDate,endDate);
out.println("cmap3:"+cmap3+"<br>");out.println("cmap1:"+cmap1+"<br>");package com.sdkjb.module;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.opencms.file.CmsObject;
import org.opencms.file.CmsResource;
import org.opencms.util.CmsUUID;public class ArticleTotal {
int count = 0;
Set<CmsUUID> cauthorid = new HashSet<CmsUUID>();
Set<CmsUUID> rauthorid = new HashSet<CmsUUID>();
Map<CmsUUID, Integer> atlmap = new HashMap<CmsUUID, Integer>();
Map<CmsUUID, Long> latlmap = new HashMap<CmsUUID, Long>();
List<CmsResource> listz =new  ArrayList<CmsResource>();
int xcount = 0;
Long pagerliang=new Long(0);


/************
 * 根据文件夹名称统计文件夹下新闻的容量
 * @param filename
 * @param obj
 * @return
 * @throws Exception
 */
public Map getArticleByRongliang(String filename, CmsObject obj,String startDate,String endDate)throws Exception { List<CmsResource> listy = obj.getFilesInFolder(filename);
for (int j = 0; listy != null && j < listy.size(); j++) {
CmsResource crc = (CmsResource) listy.get(j);
int typeid = crc.getTypeId();
CmsUUID uuid = crc.getUserCreated();
long credate=crc.getDateCreated();
int size=crc.getLength();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String publishDate = sdf.format(new Date(credate));
Date dt1 = sdf.parse(publishDate);
Date dt2 = sdf.parse(startDate);
Date dt3 = sdf.parse(endDate);

if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
xcount++;
if (rauthorid.contains(uuid)) {
latlmap.put(uuid, (latlmap.get(uuid) +new Long(size)));
// System.out.println("atlmap1:"+str+" "+atlmap.get(uuid));
} else {
// System.out.println("atlmap1:"+str+" ");
rauthorid.add(uuid);
latlmap.put(uuid,new Long(1) );
}
}
}
List<CmsResource> listx = obj.getSubFolders(filename);
for (int i = 0; listx != null && i < listx.size(); i++) {
CmsResource crc = (CmsResource) listx.get(i);
String strname = crc.getName();
int typeid = crc.getTypeId();
CmsUUID uuid = crc.getUserCreated();
int size=crc.getLength();
long credate=crc.getDateCreated();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String publishDate = sdf.format(new Date(credate));
Date dt1 = sdf.parse(publishDate);
Date dt2 = sdf.parse(startDate);
Date dt3 = sdf.parse(endDate);
if (crc.isFolder()) {
this.getArticleByRongliang(filename + "/" + strname, obj,startDate,endDate);
} else if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
if (rauthorid.contains(uuid)) {
latlmap.put(uuid, (latlmap.get(uuid) + new Long(size)));
// System.out.println("atlmap2:"+str+" "+atlmap.get(uuid));
} else {
// System.out.println("atlmap2:"+str+" ");
rauthorid.add(uuid);
latlmap.put(uuid,new Long(1));
} }
}
return latlmap;
}


/************
 * 根据文件夹名称统计文件夹下新闻的数量
 * @param filename
 * @param obj
 * @return
 * @throws Exception
 */
public Map getArticleByName(String filename, CmsObject obj,String startDate,String endDate)
throws Exception {
List<CmsResource> listy = obj.getFilesInFolder(filename);
for (int j = 0; listy != null && j < listy.size(); j++) {
CmsResource crc = (CmsResource) listy.get(j);
int typeid = crc.getTypeId();
// String strname = crc.getName();
// String str = crc.getRootPath();
CmsUUID uuid = crc.getUserCreated();
long credate=crc.getDateCreated();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String publishDate = sdf.format(new Date(credate));
Date dt1 = sdf.parse(publishDate);
Date dt2 = sdf.parse(startDate);
Date dt3 = sdf.parse(endDate);

if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
xcount++;
if (cauthorid.contains(uuid)) {
atlmap.put(uuid, (atlmap.get(uuid) + 1));
// System.out.println("atlmap1:"+str+" "+atlmap.get(uuid));
} else {
// System.out.println("atlmap1:"+str+" ");
cauthorid.add(uuid);
atlmap.put(uuid, 1);
}
}
}
List<CmsResource> listx = obj.getSubFolders(filename);
for (int i = 0; listx != null && i < listx.size(); i++) {
CmsResource crc = (CmsResource) listx.get(i);
String strname = crc.getName();
int typeid = crc.getTypeId();
CmsUUID uuid = crc.getUserCreated();
// String str = crc.getRootPath();
long credate=crc.getDateCreated();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String publishDate = sdf.format(new Date(credate));
Date dt1 = sdf.parse(publishDate);
Date dt2 = sdf.parse(startDate);
Date dt3 = sdf.parse(endDate);
if (crc.isFolder()) {
this.getArticleByName(filename + "/" + strname, obj,startDate,endDate);
} else if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
if (cauthorid.contains(uuid)) {
atlmap.put(uuid, (atlmap.get(uuid) + 1));
// System.out.println("atlmap2:"+str+" "+atlmap.get(uuid));
} else {
// System.out.println("atlmap2:"+str+" ");
cauthorid.add(uuid);
atlmap.put(uuid, 1);
} }
}
return atlmap;
} public int getArticlecount(String filename, CmsObject obj)
throws Exception { List<CmsResource> listy = obj.getFilesInFolder(filename);
for (int j = 0; listy != null && j < listy.size(); j++) {
CmsResource crc = (CmsResource) listy.get(j);
int typeid = crc.getTypeId();
if (typeid == 121) {
count++;
}
}
List<CmsResource> listx = obj.getSubFolders(filename) ;
for (int i = 0; listx != null && i < listx.size(); i++) {
CmsResource crc = (CmsResource) listx.get(i);
String strname = crc.getName();
int typeid = crc.getTypeId();
if (crc.isFolder()) {
this.getArticlecount(filename + "/" + strname, obj);
} else if (typeid == 121) {
count++;
}
}
return count;
} public List<CmsResource> getArticleMx(String filename, CmsObject obj)
throws Exception {


List<CmsResource> listy = obj.getFilesInFolder(filename);
for (int j = 0; listy != null && j < listy.size(); j++) {
CmsResource crc = (CmsResource) listy.get(j);
int typeid = crc.getTypeId();
//String struid=crc.getUserCreated().getStringValue();
if(typeid == 121) {
listz.add(crc);
count++;
}
}
List<CmsResource> listx = obj.getSubFolders(filename);
for (int i = 0; listx != null && i < listx.size(); i++) {
CmsResource crc = (CmsResource) listx.get(i);
String strname = crc.getName();
int typeid = crc.getTypeId();
//String struid=crc.getUserCreated().getStringValue();
if (crc.isFolder()) {
this.getArticleMx(filename + "/" + strname, obj);
} else if (typeid == 121) {
listz.add(crc);
count++;
}
}
return listz;
}
public static void main(String[] args) {
Map map = new Hashtable(); // 用HashMap<String, String>实例化 map.put("1", "www.baidu.com"); // 设置键值对
map.put("2", "中华人民共和国");
map.put("3", "美利坚合众国");

Map map2 = new Hashtable(); // 用HashMap<String, String>实例化 map2.put("1", "w"); // 设置键值对
map2.put("2", "q");
map2.put("3", "x");
System.out.println(map);
System.out.println(map2);
for(int i=1;i<4;i++){
System.out.println(map.get(String.valueOf(i)));
}


//
// Set<Map.Entry> entry = map.entrySet(); // 1.返回当前Map的键值对实体对象
// Iterator<Map.Entry> iter = entry.iterator(); // 2.获取Set对象的迭代
//
// while (iter.hasNext()) {
// Map.Entry<String, String> mapEntry = iter.next(); // 3.读取当前键值对对象
// System.out.println(mapEntry.getKey() + " " + mapEntry.getValue()); // 4.获取键值对对象的键、值属性
// }






}
}
结果:=============================================
cmap1:{c300ba5c-01e8-3727-b305-5dcc9ccae1ee=1, f502d930-b5b4-11e0-8b9f-295518544a60=7, 29c2e075-b5b5-11e0-8b9f-295518544a60=1}
cmap2:{c300ba5c-01e8-3727-b305-5dcc9ccae1ee=2, f502d930-b5b4-11e0-8b9f-295518544a60=7, 29c2e075-b5b5-11e0-8b9f-295518544a60=1}
cmap3:{c300ba5c-01e8-3727-b305-5dcc9ccae1ee=2, f502d930-b5b4-11e0-8b9f-295518544a60=23, 29c2e075-b5b5-11e0-8b9f-295518544a60=10}
cmap1:{c300ba5c-01e8-3727-b305-5dcc9ccae1ee=2, f502d930-b5b4-11e0-8b9f-295518544a60=23, 29c2e075-b5b5-11e0-8b9f-295518544a60=10}

解决方案 »

  1.   

    在输出cmap2时是不是也是那样的结果了啊?
      

  2.   

    c300ba5c-01e8-3727-b305-5dcc9ccae1ee=1, f502d930-b5b4-11e0-8b9f-295518544a60=7, 29c2e075-b5b5-11e0-8b9f-295518544a60=1你打印出一个map的时候,他默认的会以key=value的形式打印出来。
    也就是说:c300ba5c-01e8-3727-b305-5dcc9ccae1ee=1
    你在put操作的时候,用的key是:c300ba5c-01e8-3727-b305-5dcc9ccae1ee(应该是你生成的UUID字符串);value是1。
      

  3.   

    getArticleByName 返回的那个atlmap是个类变量
    也就是
    Map cmap1=atl.getArticleByName("/content/zhongZhi",cmsObject,startDate,endDate);
    Map cmap2=atl.getArticleByName("/content/yangZhi",cmsObject,startDate,endDate);
    Map cmap3=atl.getArticleByName("/content/nongZi",cmsObject,startDate,endDate);
    中cmap1、cmap2、cmap3都是指向同一个对象,只是没调用一次getArticleByName方法,将atlmap中的内容改了,所以最后输出cmap1和cmap3的内容一样,而且再打印cmap1、cmap2、cmap3内容都一样
      

  4.   


    Map<CmsUUID, Integer> atlmap = new HashMap<CmsUUID, Integer>();
    放到getArticleByName方法里面
      

  5.   

    在getArticleByName方法里,你需要对atlmap 重新初始化
      

  6.   

      /************
         * 根据文件夹名称统计文件夹下新闻的数量
         * @param filename
         * @param obj
         * @return
         * @throws Exception
         */
        public Map getArticleByName(String filename, CmsObject obj,String startDate,String endDate)
                throws Exception {
            List<CmsResource> listy = obj.getFilesInFolder(filename);
            for (int j = 0; listy != null && j < listy.size(); j++) {
                CmsResource crc = (CmsResource) listy.get(j);
                int typeid = crc.getTypeId();
                // String strname = crc.getName();
                // String str = crc.getRootPath();
                CmsUUID uuid = crc.getUserCreated();
                long credate=crc.getDateCreated();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String publishDate = sdf.format(new Date(credate));
                Date dt1 = sdf.parse(publishDate);
                Date dt2 = sdf.parse(startDate);
                Date dt3 = sdf.parse(endDate);
                
                if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
                    xcount++;
                    if (cauthorid.contains(uuid)) {
                        atlmap.put(uuid, (atlmap.get(uuid) + 1));
                        // System.out.println("atlmap1:"+str+" "+atlmap.get(uuid));
                    } else {
                        // System.out.println("atlmap1:"+str+" ");
                        cauthorid.add(uuid);
                        atlmap.put(uuid, 1);
                    }
                }
            }
            List<CmsResource> listx = obj.getSubFolders(filename);
            for (int i = 0; listx != null && i < listx.size(); i++) {
                CmsResource crc = (CmsResource) listx.get(i);
                String strname = crc.getName();
                int typeid = crc.getTypeId();
                CmsUUID uuid = crc.getUserCreated();
                // String str = crc.getRootPath();
                long credate=crc.getDateCreated();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String publishDate = sdf.format(new Date(credate));
                Date dt1 = sdf.parse(publishDate);
                Date dt2 = sdf.parse(startDate);
                Date dt3 = sdf.parse(endDate);
                if (crc.isFolder()) {
                    this.getArticleByName(filename + "/" + strname, obj,startDate,endDate);
                } else if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
                    if (cauthorid.contains(uuid)) {
                        atlmap.put(uuid, (atlmap.get(uuid) + 1));
                        // System.out.println("atlmap2:"+str+" "+atlmap.get(uuid));
                    } else {
                        // System.out.println("atlmap2:"+str+" ");
                        cauthorid.add(uuid);
                        atlmap.put(uuid, 1);
                    }            }
            }
            return atlmap;
        }
    红色部分涉及到一个递归,如果放在里面,岂不是又重新初始化了?这样岂不是达不到统计的目的了?
      

  7.   

       if (crc.isFolder()) {
                    this.getArticleByName(filename + "/" + strname, obj,startDate,endDate);
                } else if (typeid == 121&&dt1.getTime()>=dt2.getTime()&&dt1.getTime()<=dt3.getTime()) {
                    if (cauthorid.contains(uuid)) {
                        atlmap.put(uuid, (atlmap.get(uuid) + 1));
                        // System.out.println("atlmap2:"+str+" "+atlmap.get(uuid));
                    } else {
                        // System.out.println("atlmap2:"+str+" ");
                        cauthorid.add(uuid);
                        atlmap.put(uuid, 1);
                    }