假设我有不同类型的吸气剂和固定剂POJO.我想写一些通用算法,只需通过lambdas定义getter和setter,就可以将数据从一个更新到另一个.我试图以这种方式创建它
private static final Map<Function<Entity, Object>, BiConsumer<Entity, Object>> ACCESSORS = new HashMap
<Function<Entity, Object>, BiConsumer<Entity, Object>>() {{
put(Entity::getAreaCode, Entity::setAreaCode);
}});
Run Code Online (Sandbox Code Playgroud)
然后我遍历所有应用目标实体的条目,如果getter的结果不为null,那么我想为其他实体应用相应的setter.
但它不起作用,因为Object不能转换为String.而且我想将它用于不同的类型,不仅是字符串,还有整数等...
是否可以通过一些简单的方法解决而无需创建特殊转换器并将其与每个条目相关联?
"ReentrantLock"和"synchronized"之间在CPU级别上的实现有何不同?或者他们使用相同的"CAS"方法?
有了这样的代码:
val html = Source.fromURL("https://scans.io/json")
Run Code Online (Sandbox Code Playgroud)
获得例外:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
...
Run Code Online (Sandbox Code Playgroud)
我可以找到如何修复Java但不知道 - 如何在Scala中修复它?
我@Timed在String Boot rest控制器上使用批注,并且工作正常。控制器的方法调用服务的方法,该方法也用注释@Timed。
但是,此后续Service Bean中方法的注释不起作用(我在中看不到结果/metrics)。为什么会这样呢?可以解决吗?
以这种方式处理和统计处理数据是否可以?
long count = userDao.findApprovedWithoutData().parallelStream().filter(u -> {
Data d = dataDao.findInfoByEmail(u.getEmail());
boolean ret = false;
if (d != null) {
String result = "";
result += getFieldValue(d::getName, ". \n");
result += getFieldValue(d::getOrganization, ". \n");
result += getFieldValue(d::getAddress, ". \n");
if(!result.isEmpty()) {
u.setData(d.getInfo());
userDao.update(u);
ret = true;
}
}
return ret;
}).count();
Run Code Online (Sandbox Code Playgroud)
因此,简而言之:迭代不完整的记录,如果数据存在则更新并计算这些记录数?
我发现了(iterator?)ConcurrentLinkedHashMap的奇怪行为.如果key很长,则通过迭代entrySet/keySet获得的元素是奇怪/意外的顺序.如果钥匙短,一切都好.
以下代码:
public static void main(String[] args) {
ConcurrentLinkedHashMap<String, String> map =
new ConcurrentLinkedHashMap.Builder<String, String>().maximumWeightedCapacity(1000).build();
for (int i = 0; i < 5; i++) {
map.put(i + "", i + "");
}
print(map);
map.clear();
// NOW AGAIN THE SAME, BUT WITH LONG KEY
for (int i = 0; i < 5; i++) {
map.put(i + "aaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaa" +
"aaaaaaaaaaaaaaaaaaaaaaaaaa", i + "");
}
print(map);
}
private static void print(ConcurrentLinkedHashMap<String, String> a) {
Iterator iterator = a.entrySet().iterator();
while (iterator.hasNext()) { …Run Code Online (Sandbox Code Playgroud) 这可以通过Stream | Map完成,这样我就不需要将结果放在外部HashMap中,而是使用.collect(Collectors.toMap(...))收集结果; ?
Map<ReportType, Long> rep = new HashMap<>(); // result is here
Arrays.stream(rTypes).forEach(r -> rep.put(r.reportType, r.calcValue()));
Run Code Online (Sandbox Code Playgroud)
在哪里r.calcValue()计算新结果,然后放在地图中.
使用java.lang.Math函数。有人可以解释为什么cos(90)= 6.1的值吗?
for (int i = 0; i < 91; i++) {
System.out.println(i + " = " + cos(toRadians(i)));
}
Run Code Online (Sandbox Code Playgroud)
输出为:
0 = 1.0
1 = 0.9998476951563913
2 = 0.9993908270190958
...
89 = 0.0174524064372836
90 = 6.123233995736766E-17
Run Code Online (Sandbox Code Playgroud) java ×7
java-8 ×3
java-stream ×2
concurrency ×1
dictionary ×1
generics ×1
guava ×1
lambda ×1
math ×1
metrics ×1
micrometer ×1
scala ×1
side-effects ×1
spring ×1
spring-boot ×1
ssl ×1
trigonometry ×1