我有平面对象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>任何想法我该怎么办?
使用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)
我有这两种方法:
@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.
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有点熟悉,只是不确定如何在以下情况下应用它。
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) 假设我们的方法接收输入 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)
是否可以将不同的消费者合并到一个保护伞下并在一个地方应用?还是这是一个坏主意,而不是正确的方法?
这不是真正的错误,但是当我检查运行时版本时,它提供了以下内容,这是否表示我做错了什么?
jshell> Runtime.version()
$3 ==> 12.0.1+12
Run Code Online (Sandbox Code Playgroud) 我是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) 从 Java8 迁移到 Java11 后,我收到错误“包 com.sun.jndi.ldap 不可见”。但我需要这个包用于 LdapCtxFactory 类。包是否被移动或者我应该为我的 Ldap 连接使用另一个类?
此致
说,我有具有名称,年龄和薪水属性的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执行此条件。我怎样才能做到这一点 ?请分享您的经验。