如何避免重复并计算一旦存储在LinkedHashMap中的列表

时间:2015-02-10 18:16:14

标签: java jsp java-ee

我有一个方案来计算存储在LinkedHashMap中的名称数量,名称可以重复,但我不应该计算重复的名称。

以下是示例代码:

         LinkedHashMap<Long,MyApplicationDTO> myApps = (LinkedHashMap<Long,MyApplicationDTO>) request.getAttribute("data");
                  for (Map.Entry app : myApps.entrySet()) {                  
                  Long  ID = (Long)app.getKey() ;
                  MyApplicationDTO singleMyApp =  (MyApplicationDTO) app.getValue();

        LinkedHashMap<Long, MyDTO> myList  = singleMyApp.getMyList();
          String name = "";  
        for (Map.Entry details : myList.entrySet()) {      
            Long id1 = (Long)details.getKey() ;
            MyDTO myDetails =  (MyDTO) details.getValue();

            name = myDetails.getName(); // For first time it stores A
            //how to loop so that i can only get the count of names as 3 by avoiding duplicate names from the below shown list.
            //A B A B A B C

}

}

在屏幕上我有以下内容:

姓名: 一个 乙 一个 乙 一个 乙 ç

我必须将名称的计数打印为3(非重复名称)

4 个答案:

答案 0 :(得分:3)

在迭代entrySet时,将所有名称添加到Set<String>。然后输出set.size()

当您按set.add(name)添加名称时,Set不会添加重复项,因此该组的大小将是uniqe名称的计数。

答案 1 :(得分:2)

LinkedHashMap<Long,MyApplicationDTO> myApps = (LinkedHashMap<Long,MyApplicationDTO>) request.getAttribute("data");
for (Map.Entry app : myApps.entrySet()) {                  
Long  ID = (Long)app.getKey() ;
MyApplicationDTO singleMyApp =  (MyApplicationDTO) app.getValue();

LinkedHashMap<Long, MyDTO> myList  = singleMyApp.getMyList();
String name = "";
Set<String> uniqueNames = new HashSet<String>();
for (Map.Entry details : myList.entrySet()) {      
     Long id1 = (Long)details.getKey() ;
     MyDTO myDetails =  (MyDTO) details.getValue();

     name = myDetails.getName(); // For first time it stores A
       //how to loop so that i can only get the count of names as 3 by avoiding duplicate names from the below shown list.
            //A B A B A B C
     uniqueNames.add(name);

}

}

获取尺寸do =

uniqueNames.size();

答案 2 :(得分:1)

我不确定我是否完全理解您的问题,但如果您只想计算LinkedHashmap中唯一值的出现次数,您可以执行以下操作:

public static void main(String[] args) {

    LinkedHashMap<Long, String> myApps = new LinkedHashMap<Long, String>();
    myApps.put(4L, "A");
    myApps.put(14L, "B");
    myApps.put(44L, "A");
    myApps.put(54L, "B");
    myApps.put(46L, "A");
    myApps.put(543L, "B");
    myApps.put(144L, "C");

    ArrayList<String> names = new ArrayList<String>();

    for (Map.Entry app : myApps.entrySet()) {

        if (!(names.contains(app.getValue()))) {
            names.add(app.getValue().toString());
        }
    }

    System.out.println(names.size());
    for (String s : names ) {
        System.out.print(s + " ");
    }
}

答案 3 :(得分:1)

使用JAVA 8 Stream API的一个班轮

LinkedHashMap<Long, MyDTO> myList  = singleMyApp.getMyList();

long disctinctNamesCount = myList.values().stream().map(MyDTO::getNAme).distinct().count();