我有一个Person
包含 20 个字段并存储在 dynamoDB 中的对象。我想Person
根据某些输入创建一个新对象,检查数据库中是否存在相同的对象。如果存在,我想在 的基础上比较这两个对象19 fields out of 20
。要忽略的字段是布尔标志检查。
我用来Lombok @Data
生成 equals 方法。
有没有一种方法可以做到这一点,而不必equals
自己编写完整的重写方法?
我可以在有字符串到枚举映射的地方找到答案,但我找不到如何将枚举映射到字符串。
public class Result {
Value enumValue;
}
public enum Value {
TEST,
NO TEST
}
public class Person {
String value;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能映射这个?
我试过 :
@Mapping(target = "value", source = "enumValue", qualifiedByName = "mapValue")
@Named("mapValue")
default Person mapValue(final Value en) {
return Person.builder().value(en.name()).build();
}
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经被问过很多次了,我们在互联网上有很多文章,但我仍然无法完全理解,因为我使用的是 Java 15,我应该什么时候使用接口或抽象类。
大多数文章都讨论了之前的差异和用例Java 8
,但当您基本上可以在接口中为您的方法提供主体时,这些文章是有意义的。
唯一的那对我有意义的事情是non-public
和non-final
限制。
如果有人能指出我需要在 Java 15 中的接口和抽象类之间进行选择的场景的 1-2 个示例,我将非常感激。此外,如果它可以用于现实生活项目而不是动物或形状,那就太好了类示例。
谢谢 !!
Person
我有一个用 Lombok 注释的域类@Value
,因此将其标记为不可变,有 3 个字段。
在我的服务层中,我正在调用存储库来检查该人是否存在。
如果它确实存在,我需要Person
从数据库中获取该对象并更新该money
字段。
由于它是不可变的,因此无法完成此操作。我正在阅读一些文章,发现这可以使用构建器模式来完成。
我可能需要updatePerson()
在我的Person
班级中创建一个,但不知道如何去做。或者我需要做别的事情吗?
Person.java
:
@Value
@Builder
public class Person {
private final UUID id;
private final String job;
private final BigDecimal money;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Java 15。
我有一个 JSON 字符串:
{
"personId": "person1",
"userId": "user1"
"details": [
{
"homeId": "home1",
"expireAt": "2023-03-08T15:17:04.506Z"
}
]
}
Run Code Online (Sandbox Code Playgroud)
和
@Data
@Builder
public class MyResponse {
private String personId;
private String userId;
private List<Details> details;
}
Run Code Online (Sandbox Code Playgroud)
@Data
@Builder
public class Details {
private String homeId;
private Instant expireAt;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将 JSONString
反序列化为MyResponse
:
Gson().fromJson(string, MyResponse.class)
Run Code Online (Sandbox Code Playgroud)
但得到以下字段的期望expireAt
:
Expected BEGIN_OBJECT but was STRING at line 1 column 24 path $.details[0].expireAt
我该如何解决这个问题?
我有一个Set<Person>
,我需要过滤内容,然后填充给定集中的另一组。
我对流还很陌生。
我能想到的第一个解决方案是链接stream().filter().foreach()
解决方案一:
private Set<Person> mapPerson(final Set<Student> student) {
final Set<Person> person = new HashSet<>();
student.stream()
.filter(student1 -> Objects.nonNull(student.getAge()))
.forEach(student1 -> person.add(Person.builder()
.id(student1.getId())
.status(student1.getStatus()))
.build()));
return person;
}
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否可以通过链接来完成stream().filter().map()
?
将不胜感激任何帮助,如果可以两种方式进行,哪种方式是首选方式?
java ×5
lombok ×2
collections ×1
equals ×1
gson ×1
immutability ×1
interface ×1
java-16 ×1
java-stream ×1
mapstruct ×1
side-effects ×1