相关疑难解决方法(0)

在Stream :: flatMap中使用Java 8的Optional

新的Java 8流框架和朋友们制作了一些非常简洁的Java代码,但是我遇到了一个看似简单的情况,简单易懂.

考虑一个List<Thing> things方法Optional<Other> resolve(Thing thing).我想将Things 映射到Optional<Other>s并获得第一个Other.显而易见的解决方案是使用things.stream().flatMap(this::resolve).findFirst(),但flatMap要求您返回一个流,并且Optional没有stream()方法(或者它是Collection一个方法或提供将其转换为或以其方式查看的方法Collection).

我能想到的最好的是:

things.stream()
    .map(this::resolve)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .findFirst();
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个非常普遍的案例,似乎非常冗长.谁有更好的主意?

java lambda java-8 java-stream

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

确定是否由Java 8中的anagram元素组成的列表

我想确定列表是否是使用Java 8的字谜.

输入示例:

"cat", "cta", "act", "atc", "tac", "tca"
Run Code Online (Sandbox Code Playgroud)

我已经编写了以下功能来完成这项工作,但我想知道是否有更好,更优雅的方法来做到这一点.

boolean isAnagram(String[] list) {
    long count = Stream.of(list)
            .map(String::toCharArray)
            .map(arr -> {
                Arrays.sort(arr);
                return arr;
            })
            .map(String::valueOf)
            .distinct()
            .count();
    return count == 1;

}
Run Code Online (Sandbox Code Playgroud)

看来我不能用Stream.sorted()方法对char数组进行排序,这就是我使用第二个map运算符的原因.如果有一些方法可以直接在char流而不是Stream of char数组上运行,那也会有所帮助.

java java-8 java-stream

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

标签 统计

java ×2

java-8 ×2

java-stream ×2

lambda ×1