相关疑难解决方法(0)

map和flatMap有什么区别,每个用例都是一个很好的用例?

有人可以向我解释一下map和flatMap之间的区别以及每个的好用例是什么?

什么"压扁结果"是什么意思?到底有什么好处呢?

apache-spark

237
推荐指数
10
解决办法
15万
查看次数

Java 8 - Optional.flatmap和Optional.map之间的区别

这两种方法有什么区别:Optional.flatMap()Optional.map()

一个例子将不胜感激.

java optional java-8

136
推荐指数
6
解决办法
7万
查看次数

Java 8 Streams FlatMap方法示例

我一直在检查即将到来的Java update,即:Java 8 or JDK 8.是的,我很不耐烦,有很多新东西,但是,有一些我不明白的东西,一些简单的代码:

final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
stream.flatMap();
Run Code Online (Sandbox Code Playgroud)

javadoc是

public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper)

返回一个流,该流包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果.每个映射的流在其内容放入此流后关闭.(如果映射的流为空,则使用空流.)这是一个中间操作.

如果有人创建了一些简单的现实生活示例flatMap,如何在以前的java版本Java[6,7]中编写代码以及如何使用相同的例程编写代码,我将不胜感激Java 8.

java java-8 java-stream flatmap

84
推荐指数
4
解决办法
11万
查看次数

如何使用流来查找两个列表或数组乘法中的元素对

我有两个数字列表,我想找到所有可能的数字对.例如,给定列表[1,2,3]和[3,4],结果应该是[(1,3),(1,4),(2,3),(2,4),(3) ,3),(3,4)].

我知道我可以使用for循环来做到这一点,但有没有更简洁的方法来使用Java 8流?

我试过以下但是我错过了一些东西,因为我得到了List<Stream<int[]>>而不是List<int[]>.

public static void main(String[] args) {
    List<Integer> list1 = Arrays.asList(1, 2, 3);
    List<Integer> list2 = Arrays.asList(3, 4);
    List<int[]> pairs = list1.stream().map(i -> list2.stream().map(j -> new int[] { i, j }))
            .collect(Collectors.toList());
    pairs.forEach(i -> {
            System.out.println("{" + i[0]+ "," + i[1]+ "}");
    });
}
Run Code Online (Sandbox Code Playgroud)

java matrix-multiplication java-8 java-stream

20
推荐指数
3
解决办法
3641
查看次数

为什么Stream :: flatMap的使用错误?

我希望能够像这样使用Stream :: flatMap

public static List<String> duplicate(String s) {

    List<String> l = new ArrayList<String>();
    l.add(s);
    l.add(s);

    return l;
}


listOfStrings.stream().flatMap(str -> duplicate(str)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译器错误

Test.java:25:错误:不兼容的类型:无法推断类型变量R listOfStrings.stream().flatMap(str - > duplicate(str)).collect(Collectors.toList());

(参数不匹配; lambda表达式中的错误返回类型List无法转换为Stream)
其中R,T是类型变量:R extends方法flatMap中声明的Object(Function>)T extends Interface在Interface Stream中声明的Object

在scala我可以做我认为相同的事情

scala> List(1,2,3).flatMap(duplicate(_))
res0: List[Int] = List(1, 1, 2, 2, 3, 3)
Run Code Online (Sandbox Code Playgroud)

为什么这不是java中flatMap的有效用法?

java java-8 java-stream flatmap

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

使用Java 8 Stream API从对象列表中收集列表

我有这样的课

public class Example {
    private List<Integer> ids;

    public getIds() {
        return this.ids; 
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我有这样的类的对象列表

List<Example> examples;
Run Code Online (Sandbox Code Playgroud)

我怎样才能将所有示例的id列表映射到一个列表中?我试过这样的:

List<Integer> concat = examples.stream().map(Example::getIds).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但得到一个错误 Collectors.toList()

使用Java 8 stream api获得此功能的正确方法是什么?

java java-8

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

如何在java 8中使用流将一些字段收集到一个列表中?

例如,我有一个名字和姓氏的人.

我想从人员列表中收集一个字符串列表(姓名和姓氏),但似乎我不能每个列表使用两次地图或者每个列表不能使用两次流.我的代码是:

persons.stream()
   .map(Person::getName)
   .collect(Collectors.toSet())
   .stream().map(Person::getSurname) 
   .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

但它一直告诉我,Person静态方法不能引用非静态方法.

我究竟做错了什么?

java java-8 java-stream collectors

12
推荐指数
2
解决办法
9206
查看次数

flatMap是否保证是懒惰的?

请考虑以下代码:

urls.stream()
    .flatMap(url -> fetchDataFromInternet(url).stream())
    .filter(...)
    .findFirst()
    .get();
Run Code Online (Sandbox Code Playgroud)

fetchDataFromInternet当第一个足够的时候会被叫第二个网址吗?

我尝试了一个较小的例子,看起来像预期的那样工作.即逐个处理数据但是可以依赖这种行为吗?如果没有,请.sequential().flatMap(...)帮助前打电话吗?

    Stream.of("one", "two", "three")
            .flatMap(num -> {
                System.out.println("Processing " + num);
                // return FetchFromInternetForNum(num).data().stream();
                return Stream.of(num);
            })
            .peek(num -> System.out.println("Peek before filter: "+ num))
            .filter(num -> num.length() > 0)
            .peek(num -> System.out.println("Peek after filter: "+ num))
            .forEach(num -> {
                System.out.println("Done " + num);
            });
Run Code Online (Sandbox Code Playgroud)

输出:

Processing one
Peek before filter: one
Peek after filter: one
Done one
Processing two
Peek before filter: two
Peek after filter: …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream flatmap

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

Java8:Stream在同一个流中映射两个属性

我有一个Model具有以下签名的课程:

class Model {
        private String stringA;
        private String stringB;

        public Model(String stringA, String stringB) {
            this.stringA = stringA;
            this.stringB = stringB;
        }

        public String getStringA() {
            return stringA;
        }

        public String getStringB() {
            return stringB;
        }
}
Run Code Online (Sandbox Code Playgroud)

我想将a映射List<Model>List<String>包含stringA和stringB的单个流中

List<String> strings = models.stream()
                .mapFirst(Model::getStringA)
                .thenMap(Model::getStringB)
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

要么:

List<String> strings = models.stream()
                .map(Mapping.and(Model::getStringA,Model::getStringB))
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

当然,他们都没有编译,但你明白了.

它有可能吗?

编辑:

例:

Model ab = new Model("A","B");
Model cd = new Model("C","D");
List<String> stringsFromModels = {"A","B","C","D"};
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

flatMap()将LinkedList <String>流转换为String流

我的目标正是标题所说的.我在做的是:

.stream().flatMap(x -> x.getTitles())
Run Code Online (Sandbox Code Playgroud)

getTitles()返回一个LinkedList<String>,我期望flatMap()完成这项工作并创建一个字符串流而不是一个流LinkedList<String>,但Eclipse说:

类型不匹配:无法转换LinkedList<String>Stream<? extends Object>

我怎样才能做到这一点?(我需要用流做,它是更大的流计算的一部分)

java java-8 java-stream flatmap

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