循环遍历两个对象列表,找到相同的对象java

时间:2015-05-07 14:49:39

标签: java loops

嘿,我有两个类型对象列表。我想遍历这两个列表并找到具有相同属性的对象,即文件夹路径,以便我可以组合它们都具有的另一个属性。现在,我正在使用2 for循环并检查内循环中的匹配,这是有效的。但我的问题是有更有效的方法吗?感谢

                    for(int z = 0; z < pList.size(); z++)
                    {
                        for(int c = 0; c < eList.size(); c++)
                        {
                            if(pList.get(z).path.equals(eList.get(c).path))
                            {
                                Pair rank = new Pair();
                                rank.k = z + c / 2.0;
                                rank.path = pList.get(z).path;
                                pcList.add(rank);
                            }
                        }

                    }

3 个答案:

答案 0 :(得分:2)

我不认为如果你想检查每个元素还有另一种方法

顺便说一下,您应该更改命名约定,以便我们了解您的列表包含的内容。

清洁代码簿是你的朋友;)

答案 1 :(得分:2)

最好的选择是遍历第一个列表,并将所有路径放在一个Set中。然后,当迭代第二个列表时,只需检查您的集合中是否有此路径。

你应该大幅减少手术次数。您的代码应如下所示:

        $('.jcarousel-pagination')
    .on('jcarouselpagination:active', 'a', function () {
        $(this).addClass('active');
    })
    .on('jcarouselpagination:inactive', 'a', function () {
        $(this).removeClass('active');
    })
    .on('click', function (e) {
        e.preventDefault();
    })
    .jcarouselPagination({
        perPage: 1,
        item: function (page) {
            return '<a  href="#' + page + '">' + page + '</a>';
        }
    });
        $('.carousel-control.left').jcarouselControl({
            target: '-=1'
        });

        $('.carousel-control.right').jcarouselControl({
            target: '+=1'
        });

        $('.carousel-control, .jcarousel-pagination').click(function () {
            $('.jcarousel').jcarouselAutoscroll('stop');
        });

    });
    $(function () {
        $('#first.jcarousel')
    .jcarousel({})
    .jcarouselAutoscroll({
        interval: 10000,
        target: '+=1',
        autostart: true
    });
    });
    $(document).ready(function () {
        $('#carouselcontain').click(function () {
           interval: false;
    });

<div id="ContentPlaceHolder_ctl00_carouselcontain" class="carouselcontain">
        <div id="first" class="jcarousel" data-jcarousel="true"> 
            <ul class="carousel-images">
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
            <div class="jcarousel-pagination" data-jcarouselpagination="true"></div>
        </div>
          <!-- Left and right controls -->
          <a class="left carousel-control" href="#carouselcontain" role="button" data-slide="prev">
            <i class="fa fa-angle-left" ></i>
            <span class="sr-only">Previous</span>
          </a>
          <a class="right carousel-control" href="#carouselcontain" role="button" data-slide="next">
            <i class="fa fa-angle-right"></i>
            <span class="sr-only">Next</span>
          </a>
    </div>

答案 2 :(得分:1)

您应该使用Map<String,P>并一次性记录其中的所有P

    for (int z = 0; z < pList.size(); z++) {
        map.put(pList.get(z).path, pList.get(z));
    }

然后浏览你的eList,在地图中查找路径以获取与之关联的pList条目。

    for (int c = 0; c < eList.size(); c++) {
        P p = map.get(eList.get(c).path);
        if ( p != null ) {
            Pair rank = new Pair();
            rank.k = z + c / 2.0;
            rank.path = p.path;
            pcList.add(rank);
        }
    }