【问题标题】:Search Function in Java Data StructureJava数据结构中的搜索功能
【发布时间】:2013-09-03 04:39:24
【问题描述】:

我已经创建了大量的 People bean,并希望将它们存储在某种数据结构中,以便能够搜索特定类型的 People bean(例如姓氏为“Sanchez”的 People bean)尽可能快(顺便说一句,我不想​​使用数据库)。是循环遍历我的 bean 并为每个 bean 测试 currBean.getLastName().equals("Sanchez") 的唯一方法吗?

我希望能够执行以下操作:

List<PeopleBean> myPeople = myBeansDataStructure.getAll(new PeopleBean("John", "Sanchez", 36),
                            new Comparator<PeopleBean>() {
                                @Override
                                public int compare(PeopleBean b1, PeopleBean b2) {
                                    // search conditions
                                }
                            });

并让它返回与搜索匹配的 bean 集合。我的搜索将始终具有相同的“种类”,即,我将搜索具有特定姓氏、名字或年龄(或三者的某种排列)的 bean,因此在豆子可以用吗?

【问题讨论】:

    标签: java search data-structures


    【解决方案1】:

    我很惊讶图书馆里没有这个……是吗?

    不管怎样,你可以自己写

    public interface Condition<T> {
        public bool satisfies(T t);
    }
    

    并编写一个通用搜索器,它遍历整个并将此函数应用于每个搜索器并返回一个新的,只有返回 true 的搜索器。

    【讨论】:

    • Java 8 提供了类似的功能;参考我的回答。
    • @JoshM 是的,我看到了.. 顺便说一句,很好的代表号码:P
    【解决方案2】:

    您可以使用 Java 8(这是假设 myBeansDataStructure 是某种 Collection。):

    List&lt;PeopleBean&gt; myPeople = myBeansDataStructure.stream().filter(person -&gt; person.getLastName().equals("Sanchez")).collect(Collectors.toList());

    或者你可以试试这样的:

    List&lt;PeopleBean&gt; myPeople = myBeansDataStructure.stream().map(PeopleBean::getLastName).filter(lastName -&gt; lastName.equals("Sanchez")).collect(Collectors.toList());

    【讨论】:

    • :( 一些卑鄙的支持者打破了你的轻率......我想我现在可以 +1
    【解决方案3】:

    你可以试试这个

        List<PeopleBean> list=new ArrayList<>();
        for(PeopleBean i:list){
            if(i.getName().equals("whatEverName")){
                //do something 
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多