小编h.j*_*.k.的帖子

Java 8 DateTimeFormatter解析不同重要性的可选小数秒

我的MCVE(作为TestNG单元测试):

public class MyDateTimeFormatterTest {

    private static final String BASE_PATTERN = "yyyy/MM/dd HH:mm:ss";
    private static final DateTimeFormatter FORMATTER =
            DateTimeFormatter.ofPattern(BASE_PATTERN + "[.SSSSSSSSS]");
    private static final LocalDateTime TEST_INPUT =
            LocalDateTime.of(2015, 5, 4, 12, 34, 56, 123456789);

    @DataProvider(name = "test-cases")
    public Iterator<Object[]> getTestCases() {
        return Arrays.asList(testFor("", ChronoUnit.SECONDS),
                testFor(".SSS", ChronoUnit.MILLIS),
                testFor(".SSSSSS", ChronoUnit.MICROS),
                testFor(".SSSSSSSSS", ChronoUnit.NANOS)).iterator();
    }

    @Test(dataProvider = "test-cases")
    public void testWithDefaultResolution(String input, LocalDateTime output) {
        assertThat(FORMATTER.parse(input, LocalDateTime::from), equalTo(output));
    }

    private Object[] testFor(String patternSuffix, TemporalUnit truncatedTo) {
        return new Object[] …
Run Code Online (Sandbox Code Playgroud)

java datetime-parsing java-time

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

CompletableFuture何时实际完成?

这是MCVE:

public static void main(String[] args) {
    CompletableFuture<String> r1 = CompletableFuture.supplyAsync(() -> {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        return "41";
    });
    CompletableFuture<String> r2 = CompletableFuture.supplyAsync(() -> "42");
    CompletableFuture<String> r3 = CompletableFuture.supplyAsync(() -> {
        System.out.println("I'm called.");
        return "43";
    });
    CompletableFuture.allOf(r1, r2, r3).thenRun(() -> { System.out.println("End."); });
    Stream.of(r1, r2, r3).forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

有点好奇,没有实际完成CompletableFutureallOf(...),例如调用它join(),我得到以下输出:

I'm called.
java.util.concurrent.CompletableFuture@<...>[Not completed, 1 dependents]
java.util.concurrent.CompletableFuture@<...>[Completed normally]
java.util.concurrent.CompletableFuture@<...>[Completed normally]
Run Code Online (Sandbox Code Playgroud)

我可以知道是什么导致JVM处理/认为r11(估计数量)依赖CompletableFuture …

java completable-future

7
推荐指数
1
解决办法
3925
查看次数

如何使用来自几张地图的不同派生地图值有效地过滤和收集到生成的地图?

我有一些Map对象K使用不同类型的值键入相同类型的对象,V1...VN为了这个问题的目的,不共享超类型*:

Map<K, V1> kv1
Map<K, V2> kv2
Map<K, V3> kv3
...
Map<K, VN> kvN
Run Code Online (Sandbox Code Playgroud)

我需要创建一个结果类型的地图Map<K, V>,通过不同地过滤每个地图,然后使用"值映射器"将值映射到这些地图上V1...VN常见类型的V新值(即a Function<? super Entry<K, VN>, ? extends V>).因此,我有以下static帮助方法来执行前两个步骤:

public static <K, VN, V> Map<K, V> filterAndMapValue(final Map<K, VN> map,
        final Predicate<? super Entry<K, VN>> predicate,
        final Function<? super Entry<K, VN>, ? extends V> mapper) {
    return map.entrySet().stream().filter(predicate)
            .collect(Collectors.toMap(Entry::getKey, mapper));
}
Run Code Online (Sandbox Code Playgroud)

我当前的用例使得可以安全地假设只有在每个映射上的过滤才会给出最终Map对象的不同键(每个映射中可以使用相同的键),但是如果在未来,我知道我可以提供一个补充mergeFunction表达来Collectors.toMap(Function, …

java dictionary java-8

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