相关疑难解决方法(0)

Java 8函数式编程中'reduce'函数的第三个参数的目的

在什么情况下,在Java 8流中调用'reduce'的第三个参数?

下面的代码尝试遍历字符串列表并添加每个字符串的第一个字符的代码点值.似乎永远不会使用最终lambda返回的值,如果插入println,它似乎永远不会被调用.该文档将其描述为"组合器",但我无法找到更多细节......

int result =
  data.stream().reduce(0, (total,s) -> total + s.codePointAt(0), (a,b) -> 1000000); 
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8

29
推荐指数
3
解决办法
8336
查看次数

Java 8 Stream"收集并分组"映射到多个键的对象

我有以下对象:

public class Item {
    String value;
    List<Person> owners;
    Person creator;
}

public class Person {
    String name;
    int id;
    Person manager;
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个包含3个Item对象的列表:

i1 -> {value="1", owners=[p1, p2, p3], creator=p4}
i2 -> {value="2", owners=[p2, p3], creator=p5}
i3 -> {value="3", owners=[p5], creator=p1}
Run Code Online (Sandbox Code Playgroud)

Person对象如下:

p1 -> {manager=m1, ...}
p2 -> {manager=m2, ...}
p3 -> {manager=m3, ...}
p4 -> {manager=m2, ...}
p5 -> {manager=m1, ...}
Run Code Online (Sandbox Code Playgroud)

我想根据所有者和创建者的管理者对Item对象的流进行分组.结果Map<Person, List<Item>>应如下所示:

{
  m1: [i1, i2, i3],
  m2: [i1, i2],
  m3: [i1, i2]
}
Run Code Online (Sandbox Code Playgroud)

我认为使用Stream和Collector …

java-8 java-stream collectors

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

Java 8 streaming:如何将对象列表转换为其所选属性的列表

我上课了

class Person {
   // get/set omitted for simplicity
   public String firstName;
   public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

我也有这样的对象列表

List<Person> list ...
Run Code Online (Sandbox Code Playgroud)

我需要使用以下流转换

List<Person> list ...
List<String> firstLastNames = list.stream()....
Run Code Online (Sandbox Code Playgroud)

所以我的List firstLastNames将包含此列表中的名字和姓氏.所以.

System.out.println(firstLastNames); // will give me -> "John", "Smith", "Jessica", "Jones".. etc.
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Java Stream API比较数组中的字符串

如果有人能解释为什么我不能使用Java中的Stream API来比较数组中的String,我将很高兴.

我试图在第一个单词按字典顺序排在第二个单词之前仅过滤对.

String[] input = { "Apple", "Banana" };

    Arrays.stream(input)
            .filter( (a,b)-> a.compareTo(b)< 0 )
Run Code Online (Sandbox Code Playgroud)

看来Java不明白,"b"是一个字符串,但为什么呢?

java string compare filter java-stream

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