小编Chr*_*ail的帖子

在使用ConcurrentMap的putIfAbsent之前,你应该检查地图是否包含Key

我一直在使用Java的ConcurrentMap作为可以从多个线程使用的地图.putIfAbsent是一个很好的方法,比使用标准的map操作更容易读/写.我有一些看起来像这样的代码:

ConcurrentMap<String, Set<X>> map = new ConcurrentHashMap<String, Set<X>>();

// ...

map.putIfAbsent(name, new HashSet<X>());
map.get(name).add(Y);
Run Code Online (Sandbox Code Playgroud)

可读性明智这很好,但它确实需要每次创建一个新的HashSet,即使它已经在地图中.我可以这样写:

if (!map.containsKey(name)) {
    map.putIfAbsent(name, new HashSet<X>());
}
map.get(name).add(Y);
Run Code Online (Sandbox Code Playgroud)

通过此更改,它会失去一点可读性,但不需要每次都创建HashSet.在这种情况下哪个更好?我倾向于支持第一个,因为它更具可读性.第二个会表现得更好,也可能更正确.也许有比这两种方法更好的方法.

以这种方式使用putIfAbsent的最佳做法是什么?

java concurrency performance concurrenthashmap

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

JTable滚动到指定的行索引

JScrollPane.根据我的应用程序中发生的事件,我在运行时将一个位于行内的JTable 添加到表中.我想让一个新的行添加到表格时,scoll窗格滚动到表格的底部.

对于JLists有[ensureIndexIsVisible][1]()强制列表中的特定索引可见.我正在寻找相同的东西,但对于JTable.看起来我可能不得不手动移动滚动窗格上的滚动视图,但我认为必须有一个更简单的方法.

java swing jtable jscrollpane

45
推荐指数
3
解决办法
5万
查看次数

解析从Java Web服务返回的.NET DataSet

我必须从Java应用程序中使用.NET托管的Web服务.两者之间的互操作性通常非常好.我遇到的问题是.NET应用程序开发人员选择使用.NET DataSet对象公开数据.关于为什么不应该这样做以及它如何使互操作性变得困难,写了很多文章:

我的问题是,尽管这不是推荐的练习,但我不得不使用Web服务返回一个带有Java的DataSet.当你使用除.NET以外的任何东西为这样的东西生成代理时,你基本上会得到一个如下所示的对象:

    @XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
    protected Schema schema;
    @XmlAnyElement(lax = true)
    protected Object any;
Run Code Online (Sandbox Code Playgroud)

第一个字段是应该描述DataSet的实际模式.当我使用Java中的JAX-WS和JAXB处理它时,它将所有XS-Schema作为Java对象引入,以便在此处表示.走JAXB的对象树是可能的,但不是很漂亮.any字段表示由架构指定的架构中的DataSet的原始XML.

数据集的结构非常一致,但数据类型确实发生了变化.我需要访问类型信息,架构因呼叫而异.我虽然有一些选择,但似乎没有"好"的选择.

  • 尝试在运行时使用JAXB从模式生成Java对象似乎是个坏主意.这将太慢,因为它需要每次都发生.
  • 暴力使用JAX-WS引入的JAXB对象遍历模式树.
  • 也许不是使用JAXB来解析模式,而是更容易将其作为XML处理并使用XPath来尝试查找我需要的类型信息.

还有其他我没考虑过的选择吗?是否有一个Java库可以轻松解析DataSet对象?其他人可能有类似情况做了什么?

.net java interop web-services dataset

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

Java Swing字体选择器

在我的Java Swing应用程序中,我想让用户选择他们的字体.令我惊讶的是,没有用于选择字体的核心swing库.我期望找到一个JFileChooser,但没有这样的实用程序.这看起来像是一个简单的对话框,我确信它存在于那里.我真的不想自己写.

我在互联网上环顾四周,发现了这种对话的几种不同实现方式.问题是大多数是在随机博客上或只是代码片段.我正在寻找一个经过充分利用和测试的库的一部分.它还需要有商业友好许可证.

有没有人知道他们可以推荐一个好的Java文件选择器?

java fonts swing

13
推荐指数
3
解决办法
3万
查看次数

SQL LIKE仅使用通配符(%)作为值的性能

我想知道查询的性能如何使用LIKE关键字和通配符作为与没有where子句的值相比较.

考虑一个where子句,例如"WHERE a LIKE'%'".这将匹配列'a'的所有可能值.这与没有where子句相比如何.

我问这个的原因是我有一个应用程序,其中有一些字段,用户可以指定要搜索的值.在某些情况下,用户希望获得所有可能的结果.我目前正在使用这样的单个查询:

SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
Run Code Online (Sandbox Code Playgroud)

可以提供'%'和'%'的值以匹配a和or b的所有可能值.这很方便,因为我可以在我的应用程序中使用单个命名查询.我想知道性能考虑因素是什么.查询优化器是否会将LIKE'%'简化为全部匹配?我意识到因为我正在使用命名查询(预备语句),这也可能影响答案.我意识到答案可能是数据库特定的.具体来说,这将如何在Oracle,MS SQL Server和Derby中发挥作用.

另一种方法是根据用户输入通配符使用3个单独的查询.

A是通配符查询:

SELECT * FROM TableName WHERE b LIKE ?
Run Code Online (Sandbox Code Playgroud)

B是通配符查询:

SELECT * FROM TableName WHERE a LIKE ?
Run Code Online (Sandbox Code Playgroud)

A和B是通配符:

SELECT * FROM TableName
Run Code Online (Sandbox Code Playgroud)

没有通配符:

SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
Run Code Online (Sandbox Code Playgroud)

显然,单个查询是最简单和最容易维护的.如果性能仍然良好,我宁愿只使用一个查询.

sql sql-server oracle derby sql-like

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

脚本语言选择初始性能

我有一个小的轻量级应用程序,用作更大的解决方案的一部分.目前它是用C语言编写的,但我希望使用跨平台脚本语言重写它.该解决方案需要在Windows,Linux,Solaris,AIX和HP-UX上运行.

现有的C应用程序工作正常,但我希望有一个我可以为所有平台维护的脚本.与此同时,我不想失去很多表现,但我愿意失去一些.

脚本的启动成本非常重要.可以在每秒每分钟到多次的任何地方调用此脚本.因此,保持其内存和启动时间较低非常重要.

所以基本上我正在寻找最好的脚本语言:

  • 跨平台.
  • 能够进行XML解析和HTTP帖子.
  • 内存不足,启动时间短.

可能的选择包括但不限于:bash/ksh + curl,Perl,Python和Ruby.对于这种类型的场景,您会推荐什么?

ruby python bash perl scripting-language

9
推荐指数
5
解决办法
7678
查看次数

在Play Framework 2.0中使用公共字段

在Play Framework 1.x中,约定是在Java类上使用公共字段.这样做的理由是Play Properties Enhancers的工作方式如下所述:http://www.playframework.org/documentation/1.2.4/model

简而言之,公共字段是"正常的",因为Play会在运行时自动生成setter和getter.这对我来说很有意义,还有其他问题可以解决这个问题.

Play Framework 2.0的工作方式非常不同.没有"属性模拟"功能.也许他们正在考虑稍后添加,但我找不到任何建议.如果没有属性模拟,使用所有公共字段的原始理由就会消失.Play Framework 2.0示例仍然使用公共字段:http: //www.playframework.org/documentation/2.0/JavaEbean

为什么公共领域仍然推荐用于playframework 2.0?这只是开发者在旧版游戏中创建样本的习惯,还是在Play 2.0中仍然推荐使用公共字段的另一个原因?

java javabeans playframework-2.0

8
推荐指数
1
解决办法
1959
查看次数

检测Web服务中的客户端断开连接

我正在使用Apache CXF Web服务堆栈.当客户端在操作完成之前超时或断开与服务器的连接时,服务器将继续运行该操作,直到完成为止.我希望服务器检测客户端何时断开连接并相应地处理它.

有没有办法检测客户端何时使用Apache CXF断开连接?那么使用其他Java Web服务堆栈呢?

java web-services cxf webservice-client

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

值得学习groovy?

我要问的问题是,值得学习像groovy这样的新语言吗?因为如果我学习groovy,感觉就像我在groovy而不是java中编码.当我必须善于使用Java来编写桌面应用程序时,我的智慧是多么的聪明.所以,如果我使用Groovy很多关于Web应用程序,我将只是恶化,不得不重新开始是在java的很好,当我编写的桌面应用程序吗?

所以为什么我不坚持使用java并且擅长一种语言而不必在两种语言和语法之间切换.因为它会如此令人困惑......

language-agnostic groovy

6
推荐指数
3
解决办法
6702
查看次数

在 Gradle 设置文件中包含使用通配符的子项目

在 Gradle 中,您需要定义要在“settings.gradle”文件中构建的子项目。要构建三个子项目,您将执行以下操作:

include "child1", "child2", "child3"
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我有很多项目要包含。有没有办法在此定义中使用通配符?我正在寻找这样的东西:

include "*"
Run Code Online (Sandbox Code Playgroud)

这当然行不通。这会更容易使用,因为我有很多子项目要包含。有没有办法自动将子目录包含为项目?

java groovy build gradle

5
推荐指数
2
解决办法
4230
查看次数

表单验证在Play中使用子对象进行约束

我有一个公平的复杂表单,我试图在Play Framework 2.0中创建.我没有将所有字段都放在主窗体模型类中,而是将其分解为子对象.遗憾的是,这似乎不适用于验证限制.绑定确实有效,所以我最终得到了正确填充的对象.

有没有办法让验证工作在子对象上.请参阅以下模型和视图代码.客户端下的电子邮件地址未经过验证.

表格型号:

public class Inspection {
    // This works!
    @Email
    private String email;

    private Client client;

    // ... getters and setters
}

public class Client {
    // This does not work
    @Email
    private String email;

    // ... getters and setters
}
Run Code Online (Sandbox Code Playgroud)

视图:

@inputText(inspectionForm("email"), '_label -> "Email Address 1")
@inputText(inspectionForm("client.email"), '_label -> "Email Address 2")
Run Code Online (Sandbox Code Playgroud)

java validation playframework playframework-2.0

2
推荐指数
1
解决办法
1048
查看次数