我正在使用 Java 8 Spring 启动。我有以下方法。
public hello() {
try {
// send message
}
catch(HttpClientErrorException e) {
if (e.getRawStatusCode() == 401) {
// I need to retry the same hello() method for three times as in 10sec, 20sec and 25sec.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要调用相同的方法三次,以便在遇到 catch 块时重试。我怎样才能异步执行此操作?
我找到了下面的代码,但它不起作用。
@Retryable( value = {RestClientException.class}, maxAttempts = 3, backoff = @Backoff(3000))
Run Code Online (Sandbox Code Playgroud)
感谢你的帮助。
我在以下配置中使用咖啡因:
Cache<String, String> cache = Caffeine.newBuilder()
.executor(newWorkStealingPool(15))
.scheduler(createScheduler())
.expireAfterWrite(10, TimeUnit.SECONDS)
.maximumSize(MAXIMUM_CACHE_SIZE)
.removalListener(this::onRemoval)
.build();
private Scheduler createScheduler() {
return forScheduledExecutorService(newSingleThreadScheduledExecutor());
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地假设该onRemoval方法将在 ForkJoinPool 上执行newWorkStealingPool(15),并且只会调用调度程序来查找需要驱逐的过期条目?
这意味着它会像这样:
newWorkStealingPool(15)对缓存构建器中的定义中的每个被逐出的条目执行 onRemoval 吗?我没有找到解释此行为的文档,所以我在这里询问
总氮
我之前使用 HashMap 从常量映射中获取键。
在传递NULL 键时containsKey(),我常常得到FALSE。
为了让代码看起来更漂亮,我尝试了 java-8 。因此,我开始使用 Map.ofEntries来构建我的地图,而不是 HashMap
令人惊讶的是,当将空键传递给方法时,我得到了空指针异常containsKey()
String str = null;
Map<String,String> hashMap = new HashMap<>();
hashMap.put("k1", "v1");
System.out.print(hashMap.containsKey(str)); // This gives false
Map<String,String> ofEntriesMap = Map.ofEntries( Map.entry("k1", "v1"));
System.out.print(ofEntriesMap.containsKey(str)); // Why this gives Null Pointer Exception ?
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么它的行为有所不同Map.ofEntries。
处理这种情况的最佳方法是什么?
我有一个Map<String, String>
List<String>我想流式传输I call中的所有值keys。
我怎样才能让它从地图返回值?
地图是这样的:
("Frank", "Car")
("Bob", "Bike")
("Jim", "Truck")
Run Code Online (Sandbox Code Playgroud)
我给它的钥匙列表:
["Frank","Jim"]
Run Code Online (Sandbox Code Playgroud)
预期结果:
["Car","Truck"]
Run Code Online (Sandbox Code Playgroud)
我尝试了这个,但它只打印键而不是值。
keys.stream()
.filter(map::containskey)
.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud) 我是使用流和函数式接口进行编程的新手,并且在文档中java.util.function.BiConsumer描述了如下方法accept,但尚不清楚
void accept(T t,
U u)
Performs this operation on the given arguments.
Parameters:
t - the first input argument
u - the second input argument
Run Code Online (Sandbox Code Playgroud)
函数接口可以使用 lamda 表达式来引用,如下所示
BiConsumer<String,String> a=(a,b)->{
}
Run Code Online (Sandbox Code Playgroud)
但“此操作在这里到底意味着什么”。提前致谢
我有多年的 Java 8 及其 lambda 经验。但当我开发一个 hello-world 大小的 Spark 程序时,我遇到了一个疯狂的问题。
这里我有一个Java类,其中的Data注释来自Lombok:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
Run Code Online (Sandbox Code Playgroud)
然后我构建了一个包含Persion类对象的 java 列表:
Person p1 = new Person("sb", 1L);
Person p2 = new Person("sth", null);
List<Person> list = new ArrayList<>(2);
list.add(p1);
list.add(p2);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都很好。然后我尝试使用该列表生成 Spark 数据集:
SparkSession session = SparkSession.builder().master("local[1]").appName("SparkSqlApp").getOrCreate();
Encoder<Person> personEncoder = Encoders.bean(Person.class);
Dataset<Person> dataset1 = session.createDataset(list, personEncoder);
dataset1.foreach(new ForeachFunction<Person>() { // 1
@Override
public void call(Person person) throws Exception {
System.out.println(person);
} …Run Code Online (Sandbox Code Playgroud) 从今天开始我不能再构建我的项目了。其中没有任何变化。看起来一些 Gradle 依赖项是用 Java 11 重新编译的。我使用的是 Java 8 和 Gradle 4.10。
org/eclipse/jgit/storage/file/FileRepositoryBuilder 已由更新版本的 Java 运行时(类文件版本 55.0)编译,此版本的 Java 运行时仅识别最高版本为 52.0 的类文件
有人有同样的问题吗?
./gradlew --version
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------
Build time: 2018-12-05 00:50:54 UTC
Revision: e76905e3a1034e6f724566aeb985621347ff43bc
Kotlin DSL: 1.0-rc-6
Kotlin: 1.2.61
Groovy: 2.4.15
Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM: 1.8.0_292 (Private Build 25.292-b10)
OS: Linux 4.15.0-142-generic amd64
Run Code Online (Sandbox Code Playgroud)
echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64/
Run Code Online (Sandbox Code Playgroud)
./gradlew clean
FAILURE: Build failed with an exception.
* What went wrong:
org/eclipse/jgit/storage/file/FileRepositoryBuilder has been compiled by …Run Code Online (Sandbox Code Playgroud) 我正在将 grails 2.2 升级到 grails 4.0.10。
在使用 java 7 的 grails 2.2 中,这曾经可以工作
def eanalytics = EventAnalytics.createCriteria().get(){
eq('event', raceGroup)
lt('dateCreated', timeService.now())
gt('dateCreated', timeService.now() - 1)
}
Run Code Online (Sandbox Code Playgroud)
现在对于 grails 4 和 java 8 我收到此异常
Caused by: groovy.lang.MissingMethodException: No signature of method: java.util.Date.minus() is applicable for argument types: (Integer) values: [1]
Possible solutions: find(), find(groovy.lang.Closure), is(java.lang.Object), any(), print(java.io.PrintWriter), use([Ljava.lang.Objec
Run Code Online (Sandbox Code Playgroud)
似乎我无法通过减去 java 8 中迄今为止的天数来获得新日期。执行此操作的等效代码是什么?谢谢您的帮助。
timeservice.now 是
def now(){
def now = new Date()
return now
}
Run Code Online (Sandbox Code Playgroud) 我有这样的集合:Map<Integer, List<MyObject>> collection
我想将整个列表映射MyObject到MyObjectDTO并返回带有映射列表的整个地图。
所以返回将是:
Map<Integer, List<MyObjectDto>> collectionWithDtos
最简单、最快的方法是什么?我已经检查了几种使用流的方法,但没有一个产生我预期的结果。谢谢
当Java文件是接口时,如TestInterface.java:
public interface TestInterface {
void method(String parameterName);
}
Run Code Online (Sandbox Code Playgroud)
我用 编译javac -g TestInterface.java,然后用 反汇编javap -v TestInterface,输出如下:
Classfile /private/tmp/TestInterface.class
Last modified Mar 17, 2022; size 148 bytes
MD5 checksum da2f58afc0eaf77badc94c90de385198
Compiled from "TestInterface.java"
public interface TestInterface
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT
Constant pool:
#1 = Class #7 // TestInterface
#2 = Class #8 // java/lang/Object
#3 = Utf8 method
#4 = Utf8 (Ljava/lang/String;)V
#5 = Utf8 SourceFile
#6 = Utf8 …Run Code Online (Sandbox Code Playgroud) java-8 ×10
java ×7
collections ×2
java-stream ×2
asynchronous ×1
caching ×1
gradle ×1
grails ×1
grails-4 ×1
javac ×1
jvm ×1
lambda ×1
spring-boot ×1
spring-retry ×1