小编Nam*_*man的帖子

如何使用java流将平面对象转换为有意对象

我有平面对象POJO:

class FamilyInformation {
  String house;
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

使用这样的数据:

[{
 house: "houseName1",
familyMember: "Son"
},
{
 house: "houseName1",
familyMember: "Mom"
},
{
 house: "houseName1",
familyMember: "Dad"
}]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为分层对象POJO:

class House {
  String houseName;
  List<FamilyMember> familyMembers;
}
class FamilyMember {
  String familyMember;
}
Run Code Online (Sandbox Code Playgroud)

我发现的每一条信息都是将其转换为地图.但是我想要List<House>包含List<FamilyMember>任何想法我该怎么办?

java java-8 java-stream

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

使用Stream.reduce反演和不正确

使用Stream.reduce反演求和不正确,这里出了什么问题?

double[] array = {1.0, 2.0};
double iunversionSum = Arrays.stream(array).reduce(0.0, (a, b) -> Double.sum(1.0 / a, 1.0 / b));
Run Code Online (Sandbox Code Playgroud)

输出为.5,但预计为1.5(1/1 + 1/2)

java reduce java-8 java-stream

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

创建新的Map.Entry - 似乎比它需要的更难

我有这两种方法:

 @Override
  public void done(E e, Map.Entry<String, T> m) {

  }

  @Override
  public void done(E e, String k, T v) {
     this.done(e, null);
  }
Run Code Online (Sandbox Code Playgroud)

而不是传递null,我如何创建一个新的Map.Entry?我试过了:

this.done(e, Map.of(k,v));
Run Code Online (Sandbox Code Playgroud)

但是这会创建一个Map而不是Map.Entry.

java hashmap java-11

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

如何在Java 8中替换以下代码?

private void createAnagramSignatures() {
    for (String word : dictionary.keySet()) {
        int signature = getSignature(word);
        if (!anagramMap.containsKey(signature)) {
            anagramMap.put(signature, new ArrayList<String>());
        }
        anagramMap.get(signature).add(word);
    }
}
Run Code Online (Sandbox Code Playgroud)

我对map.getOrDefault有点熟悉,只是不确定如何在以下情况下应用它。

java dictionary java-8

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

java8 orElse(null.getValue())如何处理

elseCondition当前抛出空值时是否可以在一行中写nullPointer

在我的场景中,returnValue是一个String,它为null。

我要写的条件是

if (returnValue != null) {
    return returnValue;
} else if (elseCondition != null) {
    return elseCondition.getValue();
} else {
    return null;
}

Optional.ofNullable(returnValue).orElse(elseCondition.getValue()) //throws nullPointer as elseCondition is null

class ElseCodnition {
    private  String value;

    getValue() {...}
}
Run Code Online (Sandbox Code Playgroud)

java java-8

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

将使用者与不同的参数或不同的参数编号组合

假设我们的方法接收输入 String并返回一些List output。此输出是一些生成器的结果,其中一些生成器取决于输入,而有些则不取决于输入-它们只是添加预定义的值。我想将这些生成器实现为一些函数接口的列表(例如,Consumer),然后将它们组合到一个Consumer中,然后将其应用于输入String。

因此,我将能够轻松,独立地更换小型发电机。但是问题在于,并非我的所有生成器都需要输入 String作为参数,而我只是出于一个原因就将这个参数传递给了它-能够将此类使用者与其他使用者组合在一起。

public class ConsumersTest {

private static <T, U> BiConsumer<T, U> combine(List<BiConsumer<T, U>> consumers) {
    return consumers.stream().reduce((arg1, arg2) -> {}, BiConsumer::andThen);
}

List<String> generate(String input) {
    ArrayList<String> output = new ArrayList<>();
    combine(getGenerators()).accept(input, output);
    return output;
}

private List<BiConsumer<String, List<String>>> getGenerators() {
    return Arrays.asList(
            this::addFirstDependent,
            this::addSecondIndependent
    );
}

private void addFirstDependent(String input, List<String> output) {
    if (input.contains("some string")) {
        output.add("First-Dependent");
    }
}

private void addSecondIndependent(String input, List<String> output) {
    output.add("Predefined Output");
}}
Run Code Online (Sandbox Code Playgroud)

是否可以将不同的消费者合并到一个保护伞下并在一个地方应用?还是这是一个坏主意,而不是正确的方法?

java lambda java-8 functional-interface method-reference

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

JDK12的Java运行时版本

这不是真正的错误,但是当我检查运行时版本时,它提供了以下内容,这是否表示我做错了什么?

jshell> Runtime.version()
$3 ==> 12.0.1+12
Run Code Online (Sandbox Code Playgroud)

java jshell java-12

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

使用lambda从嵌套在嵌套地图中的一组列表中构建最大值列表

我是Java 8的新手,我需要重写一段旧代码以实现新的算法。任务是过滤每个列表具有最大速度的对象。列表嵌套在地图内部:道路的根地图,其中包含路段的地图,每条路段的地图都包含一系列对象,每个对象描述一个时间间隔的测得速度。我需要找到每个列表的所有最大速度。

我发现以下链接看起来像我的问题,但是我无法适应它们,而且我不确定我的尝试能否正确解决我的问题。

如何使用Java 8流和过滤器过滤嵌套循环?

Java 8筛选器映射<String,List <Employee >>

在地图上过滤

这是我用来写我的例子的代码


Map<String, Map<String, Employee>> employeeMap =
                            employeeMap.entrySet()
                                       .stream()
                                       .collect(toMap(Map.Entry::getKey,
                                                      e -> e.getValue().entrySet().stream()
                                                      .filter(emp -> !emp.getValue().getState().equals("MI"))
                                                      .collect(toMap(Map.Entry::getKey, Map.Entry::getValue))));


for(Car car : cars) {
                        for (Engine engine : car.getEngines()) {
                            for (Part part : engine.getParts()) {
                                // ...
                            }
                        }
                    }


                    cars.stream()
                        .flatMap(car -> car.getEngines().stream())
                        .flatMap(engine -> engine.getParts().stream())
                        .forEach(part -> {  ... });


Run Code Online (Sandbox Code Playgroud)

这是我的结果代码



Map<Integer, Map<Integer, List<PartialSpeed>>> speedsPerRoadPerSegment; 


ArrayList<PartialSpeed> maxSpeedPerSegment = new ArrayList<PartialSpeed>();
                    speedsPerRoadPerSegment.entrySet().stream()
                            .forEach(road-> road.getValue().entrySet()
                            .stream()
                            .forEach(segment ->
                            {
                                Optional<PartialSpeed> result …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

Java 8 到 Java 11:包 com.sun.jndi.ldap 不可见

从 Java8 迁移到 Java11 后,我收到错误“包 com.sun.jndi.ldap 不可见”。但我需要这个包用于 LdapCtxFactory 类。包是否被移动或者我应该为我的 Ldap 连接使用另一个类?

此致

java ldap package java-8 java-11

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

Java将字符串评估为表达式或代码执行

说,我有具有名称,年龄和薪水属性的Emp对象列表。

List<Emp> empObj = readEmpDetails();
Run Code Online (Sandbox Code Playgroud)

保留来自DB的过滤条件或从平面文件读取。但是语法如下格式。

name contains mike
age gt 100
Run Code Online (Sandbox Code Playgroud)

如何将上述条件列表转换为Java表达式。需要针对我们从数据库源读取的empObj执行此条件。我怎样才能做到这一点 ?请分享您的经验。

java apache

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