Java List找到相同的项目

时间:2013-10-29 14:44:16

标签: java list hashmap

我有一个班级标题:

public class Heading {
    // Some other members, methods etc.
    private String description;
    public String getDescription() {
        return description;
    }
}

我需要编写一个方法,将具有相同描述的所有标题组合在一起,并返回一个具有标题列表的地图,其描述与地图中的值相同。

[原始问题的一部分如下。我不清楚(andybalaam)在地图的键中需要什么。]

  

我需要创建一个迭代标题列表的方法,以查明是否存在   标题对象具有相同的描述。在这一点上,我想复制所有   将具有相同描述的标题对象放入另一个List并放入   这个List成了一个   HashMap<整数,列表<标题> >   该方法应返回此HashMap,其中包含每个键的标题列表   具有相同描述的对象。

1 个答案:

答案 0 :(得分:0)

此函数返回描述地图 - >标题清单。你不能拥有list-size-list的地图 - >标题列表,因为您可能有多个具有相同长度的列表,并且您只能有一个具有给定键的映射条目。

public static Map<String, List<Heading>> sameDescs( List<Heading> input )
{
    Map<String, List<Heading>> ret = new HashMap<String, List<Heading>>();

    for( Heading heading : input )
    {
        if( ! ret.containsKey( heading.getDescription() ) )
        {
            ret.put( heading.getDescription(), new ArrayList<Heading>() );
        }
        ret.get( heading.getDescription() ).add( heading );
    }

    return ret;
}

您可以打印列表的大小,如下所示:

public static void main( String[] args ) {
    List<Heading> myList = new ArrayList<Heading>();
    myList.add( new Heading( "desc1" ) );
    myList.add( new Heading( "desc2" ) );
    myList.add( new Heading( "desc1" ) );

    Map<String, List<Heading>> result = sameDescs( myList );

    for( Map.Entry<String, List<Heading>> e : result.entrySet() ) {
        System.out.println( e.getKey() + ":" + e.getValue().size() );
    }
}

产生如下输出:

desc1:2
desc2:1