小编blo*_*ell的帖子

此用例的Java集合

假设我们有一堆Car对象.

每辆车都有一些与众不同的特性,例如制造商,型号,年份等(这些可用于创建不同的hashCodes).

每辆车都有一个PurchaseOffer对象列表(PurchaseOffer对象包含定价\零售商信息).

我们收到来自几个不同来源的汽车列表,每辆汽车都有一个PurchaseOffer.事实是,这些列表可能重叠 - 一辆车可以出现在多个列表中.

我们希望将列表汇总到一个汽车集合中,其中每辆汽车都拥有所有遇到的PurchaseOffers.

我的问题是选择在此聚合过程中使用的集合:

感觉很自然地使用java.util.HashSet来保存我们的汽车,这样当经过不同的汽车列表时,我们可以检查汽车是否已经存在于已分配的O(1)中,但是 - 你无法检索一个元素从一个Set(在我们的例子中 - 当我们遇到一个已经存在于Set中的Car时 - 我们希望基于其标识hashCode从Set中检索该Car并向其添加PurchaseOffers).

我可以使用HashMap,其中每个Car的hashCode映射到实际的Car对象,但它可能不是学校书籍解决方案,因为它不安全 - 我必须确保自己每个hashCode映射到具有该hashCode的Car - 可能存在不一致.当然,可以制作一个保证这种一致性的指定数据结构 - 不应该已经存在吗?

任何人都可以建议我追求的数据结构,或指出设计错误?谢谢.

java collections set hashcode data-structures

7
推荐指数
2
解决办法
882
查看次数

在FilterChain.doFilter()之后添加Cookie - HttpServletResponseWrapper忽略刷新?

我想HttpServletResponse在其内容(通常是HTML)呈现之后添加cookie .

正如这里所提到的(http://osdir.com/ml/java.jasig.uportal/2005-10/msg00276.html),这里(在刷新标题后,在Java中为响应添加一个cookie?),这个可以通过缓冲响应来实现它不会被刷新并发送到客户端(因为在将报头发送到客户端之后,响应被提交,并且不再有标头,即cookie头,可以发送到客户端).

假设这是目前的目标:我认为实现这一目标的一种可能方法是使用a HttpServletResponseWrapper,我可以覆盖它的flushBuffer()方法并防止将header\content实际刷新到客户端:

public class BufferedHttpServletResponse extends HttpServletResponseWrapper {

    public BufferedHttpServletResponse(HttpServletResponse response) {
        super(response);
    }

    public void flushBuffer() {
    }

}
Run Code Online (Sandbox Code Playgroud)

并将此缓冲响应应用于a Filter,以使用过滤器链的其余部分:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {

    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    BufferedHttpServletResponse bufferedResponse = new BufferedHttpServletResponse(response);

    chain.doFilter(request, bufferedResponse);

    // ... create Cookie and add it to response ... response.addCookie(newCookie)
    // response.flushBuffer() ?        

}
Run Code Online (Sandbox Code Playgroud)

问题:上面还可以,还是完全关闭?响应的缓冲区是否会继续填充内容\标题(并且可能会重新调整大小)直到我 …

cookies servlets flush servlet-filters

6
推荐指数
1
解决办法
3406
查看次数

我对这些XPath表达式的含义是正确的吗?

这是为了学校,如果你知道你的XPath并且不介意告诉我我是否正确:

1. //a[/b]/a

每个'a'在树中有一个父'a',其中根是'b'.(该位置[/b]无关紧要?即上述等价于//a/a[/b]

2. //*[//a]//a[/a][a]

从左到右分解: //*[//a]意味着所有元素都有一个后代'a',因此//*[//a]//a(相当学校)是指所有'a'元素.并且//*[//a]//a[/a]表示树中所有'a'元素,其中根是'a',最后 - //*[//a]//a[/a][a]表示树中所有'a'元素,其中根是'a',其中有一个子'a'.

感谢您的帮助,似乎无法在任何地方获得直接答案.

xpath

5
推荐指数
1
解决办法
161
查看次数

用Joda-Time计算持续时间

我正在尝试使用Joda-Time来了解两个时间点之间的持续时间,其中每个点都在其自己的本地时区中给出.

例如:

DateTime ny = new DateTime(2011, 2, 2, 7, 0, 0, 0, DateTimeZone.forID("America/New_York"));
DateTime la = new DateTime(2011, 2, 3, 10, 15, 0, 0, DateTimeZone.forID("America/Los_Angeles"));
DateTime utc1 = ny.withZone(DateTimeZone.UTC);
DateTime utc2 = la.withZone(DateTimeZone.UTC);        
Period period = new Period(utc1, utc2);
Run Code Online (Sandbox Code Playgroud)

现在,我想知道这是否考虑到日光节省和闰年...而且,使用'Period'是正确的Joda-Time方式来实现这一目标吗?谢谢 ;)

java timezone jodatime dst leap-year

4
推荐指数
1
解决办法
1万
查看次数