首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何缓存查找列表中对象的属性?

如何缓存查找列表中对象的属性?
EN

Stack Overflow用户
提问于 2017-08-23 10:51:58
回答 2查看 279关注 0票数 0

我有一份列有条目的清单如下:

代码语言:javascript
复制
public class Entry {
   private String origin;
   private String destination;
   private Date date;
}

我希望能够独立搜索这些属性中的每一个,并相应地显示属于的条目。

示例:

代码语言:javascript
复制
#origin, destination, date
berlin, newyork, 2017-10-10
berlin, london, 2017-10-10
sydney, barcelona, 2017-10-10
  • 如果有人搜索"origin=berlin",我想显示:destinations=newyork, london; date=2017-10-10
  • 搜索destination=london应该会导致origin=berlin; date=2017-10-10
  • 同样,搜索date=2017-10-10应该显示origin=berlin, sydney; destination=newyork, london, barcelona

问:我如何在内存中实现这个功能(我不能使用mysql数据库)?

当然,每次出现搜索请求时,我都可以迭代我的所有对象,例如:

代码语言:javascript
复制
List destinations;
List dates;

for (entry : entries) {
  if (entry.origin.equals("berlin")) {
    destinations.add(entry.destination);
    dates.add(entry.date);
  }
}

但是我更喜欢缓存的解决方案,所以我不需要在每次搜索中重新创建它们(也可以节省时间)。

Entry列表是SELECT DISTINCT origin, dest, date from table的视图。因为我不想在每个搜索请求上查询数据库。

EN

回答 2

Stack Overflow用户

发布于 2017-08-23 11:00:30

番石榴的Multiset或Multimap实现可能会派上用场:

https://github.com/google/guava/wiki/NewCollectionTypesExplained

更好的是,apache JXpath:

http://commons.apache.org/proper/commons-jxpath/

票数 1
EN

Stack Overflow用户

发布于 2017-08-23 11:05:17

你在用Java8吗?如果是这样的话,流应该能够做到这一点(我刚刚过滤了原点,但是示例可以扩展到所有字段.):

代码语言:javascript
复制
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

public class Combinations {

    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 

        List<Entry> list = new ArrayList<>();
        list.add(new Entry("berlin", "newyork", sdf.parse("2017-10-10")));
        list.add(new Entry("berlin", "london", sdf.parse("2017-10-10")));
        list.add(new Entry("sydney", "barcelona", sdf.parse("2017-10-10")));

        System.out.println(list);

        String filterOrigin = "berlin";

        System.out.println(list.stream().filter(e -> e.getOrigin().equals(filterOrigin)).collect(Collectors.toList()));
    }
}

class Entry {
    private String origin;
    private String destination;
    private Date date;
    public Entry(String origin, String destination, Date date) {
        super();
        this.origin = origin;
        this.destination = destination;
        this.date = date;
    }
    @Override
    public String toString() {
        return "Entry [origin=" + origin + ", destination=" + destination + ", date=" + date + "]";
    }
    public String getOrigin() {
        return origin;
    }
    public void setOrigin(String origin) {
        this.origin = origin;
    }
    public String getDestination() {
        return destination;
    }
    public void setDestination(String destination) {
        this.destination = destination;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45837660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档