相关疑难解决方法(0)

如何将Optional <T>转换为Stream <T>?

我想在一个带有Optional的前缀中添加一个流.既然Stream.concat只能连接Streams我有这个问题:

如何将Optional <T>转换为Stream <T>?

例:

Optional<String> optional = Optional.of("Hello");
Stream<String> texts = optional.stream(); // not working
Run Code Online (Sandbox Code Playgroud)

java optional java-8 java-stream

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

从Java 8映射操作返回空元素

使用Java 8流,当输入Integer没有输出时,映射a 的最佳方法是什么List<Integer>

只需返回null?但现在我的输出列表大小将小于我的输入大小...

    List<Integer> input = Arrays.asList(0,1,2,3);
    List<Integer> output = input.stream()
                                .map(i -> { 
                                    Integer out = crazyFunction(i);
                                    if(out == null || out.equals(0))
                                        return null;
                                    return Optional.of(out);
                                    })
                                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

java map java-8 java-stream

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

当可选项为空时如何返回?

我喜欢自选是在Java标准库现在.但是我仍然遇到一个基本问题,我还没有弄清楚如何以最好的方式解决(最容易阅读和理解,最漂亮,最短)的方式:

当可选项为空时如何从方法返回?

我正在寻找一个通用的解决方案,适用于选项数和代码块大小的不同组合.

在下面的例子中,我将尝试展示我的意思:

void m1() {
    // When I get an optional:
    Optional<String> o = getOptional();

    // And want to return if it's empty
    if (!o.isPresent()) return;

    // In the whole rest of the method I have to call Optional.get 
    // every time I want the value:
    System.out.println(o.get());

    // Which is pretty ugly and verbose!
}


void m2() {
    // If I instead return null if a value is absent:
    String s = getNullabe();
    if (s == …
Run Code Online (Sandbox Code Playgroud)

java nullable optional

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

如何从键的地图<K,V>和列表<K>创建List <T>?

使用Java 8 lambdas,有效创建新的List<T>给定的List<K>密钥和"a "的"最佳"方法是Map<K,V>什么?在这种情况下,您将获得一些List可能的Map键,并且应该生成一个List<T>where T,这是基于Vmap值类型的某些方面构造的某种类型.

我已经探索了一些并且感到不舒服声称一种方式比另一种方式更好(可能有一个例外 - 参见代码).我将澄清"最佳"作为代码清晰度和运行时效率的组合.这些是我想出来的.我相信有人可以做得更好,这是这个问题的一个方面.我不喜欢filter大多数方面,因为它意味着需要创建中间结构和多次传递名称List.现在,我选择了例6 - 一个简单的'ol循环.(注意:代码注释中有一些神秘的想法,特别是"需要外部引用......"这意味着从lambda外部.)

public class Java8Mapping {
    private final Map<String,Wongo> nameToWongoMap = new HashMap<>();
    public Java8Mapping(){
        List<String> names = Arrays.asList("abbey","normal","hans","delbrook");
        List<String> types = Arrays.asList("crazy","boring","shocking","dead");
        for(int i=0; i<names.size(); i++){
            nameToWongoMap.put(names.get(i),new Wongo(names.get(i),types.get(i)));
        }
    }

    public static void main(String[] args) {
        System.out.println("in main");
        Java8Mapping j = new Java8Mapping();
        List<String> testNames = Arrays.asList("abbey", "froderick","igor");
        System.out.println(j.getBongosExample1(testNames).stream().map(Bongo::toString).collect(Collectors.joining(", "))); …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

16
推荐指数
2
解决办法
858
查看次数

Java 8 collect()只有isPresent()可选值

有没有更优雅的方法在Java 8中实现这一目标?

list.stream()
    .map(e -> myclass.returnsOptional(e))
    .filter(Optional::isPresent)
    .map(Optional::get)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我正在谈论filter(Optional::isPresent)随后map(Optional::get),我想优雅地在列表中收集Optional具有值的结果.

java optional java-8 java-stream

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

为什么Optional <T>被声明为最终类?

我正在玩下面的问题:在Stream :: flatMap中使用Java 8的Optional,并希望将一个方法添加到自定义中Optional<T>,然后检查它是否有效.
更准确地说,我想添加一个stream()我的CustomOptional<T>,如果没有值,则返回一个空流,或者如果存在,则返回一个包含单个元素的流.

但是,我得出的结论Optional<T>是宣布为最终结论.

为什么会这样?有很多类没有被声明为final,我个人认为没有理由宣布Optional<T>final.

作为第二个问题,为什么所有的方法都不能是最终的,如果担心它们会被覆盖,并且让课程不是最终的?

java java-8

14
推荐指数
1
解决办法
2286
查看次数

为什么OptionalInt类中没有mapToInt()?

IntStream班有map(),mapToObj(),mapToLong()mapToDouble()方法,但这些方法似乎是从丢失OptionalInt类.

是否有充分的理由让这些方法丢失?

java java-8

10
推荐指数
1
解决办法
258
查看次数

Java 8可选仅在optional.isPresent时添加返回结果

我有一段代码,其中一个接口有一个Optional返回方法,一些类实现它返回一些东西,其他没有.

为了拥抱这个辉煌的"空杀手",这是我尝试过的:

public interface Gun {
    public Optional<Bullet> shoot();
}

public class Pistol implements Gun{
    @Override
    public Optional<Bullet> shoot(){
        return Optional.of(this.magazine.remove(0)); 
    }//never mind the check of magazine content
}

public class Bow implements Gun{
    @Override
    public Optional<Bullet> shoot(){
        quill--;
        return Optional.empty();
    }
}

public class BallisticGelPuddy{
    private Gun[] guns = new Gun[]{new Pistol(),new Bow()};
    private List<Bullet> bullets = new ArrayList<>();
    public void collectBullets(){
        //here is the problem
        for(Gun gun : guns)
            gun.shoot.ifPresent(bullets.add( <the return I got with the method>)
}} …
Run Code Online (Sandbox Code Playgroud)

java optional java-8 null-check

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

java lambda - 如何遍历可选列表/可选流

有一个可选的可选列表,例如:

Optional<List<Optional<String>>> optionalList = Optional.of(
    Arrays.asList(
        Optional.empty(),
        Optional.of("ONE"),
        Optional.of("TWO")));
Run Code Online (Sandbox Code Playgroud)

如何遍历optionalList以打印出字符串的ONEand TWO

有一个可选的可选流怎么样?

Optional<Stream<Optional<String>>> optionalStream = Optional.of(
    Stream.of(
        Optional.empty(),
        Optional.of("ONE"),
        Optional.of("TWO")));
Run Code Online (Sandbox Code Playgroud)

更新:感谢您的回答,optionalStream 的解决方案(非嵌套):

optionalStream
    .orElseGet(Stream::empty)
    .filter(Optional::isPresent)
    .map(Optional::get)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java lambda optional java-8 java-stream

8
推荐指数
4
解决办法
2万
查看次数

Java的flatMap在可选整数列表的列表中

我有以下一些简化的代码无法编译,我不明白为什么:

List<Optional<Integer>> list =
    new ArrayList<>();
List<Integer> flattened = 
  list
    .stream()
    .flatMap(i -> i)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

编译器告诉我:

[ERROR] ... incompatible types: cannot infer type-variable(s) R
[ERROR]     (argument mismatch; bad return type in lambda expression
[ERROR]       Optional<Integer> cannot be converted to Stream<? extends R>)
[ERROR]   where R,T are type-variables:
[ERROR]     R extends Object declared in method <R>flatMap(Function<? super T,? extends Stream<? extends R>>)
[ERROR]     T extends Object declared in interface Stream
Run Code Online (Sandbox Code Playgroud)

我承认我不习惯Java,但我必须参与一个项目.我在Scala中嘲笑了这一点,list.flatten并且list.flatMap(i => i)正如预期的那样等效工作:

val list = List(Some(1), …
Run Code Online (Sandbox Code Playgroud)

java optional java-8 java-stream

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

标签 统计

java ×10

java-8 ×9

java-stream ×6

optional ×6

lambda ×1

map ×1

null-check ×1

nullable ×1