小编new*_*ner的帖子

如何忽略 Java equals() 中自定义对象的 1 个字段?

我有一个Person包含 20 个字段并存储在 dynamoDB 中的对象。我想Person根据某些输入创建一个新对象,检查数据库中是否存在相同的对象。如果存在,我想在 的基础上比较这两个对象19 fields out of 20。要忽略的字段是布尔标志检查。

我用来Lombok @Data生成 equals 方法。

有没有一种方法可以做到这一点,而不必equals自己编写完整的重写方法?

java equals lombok

8
推荐指数
1
解决办法
3860
查看次数

如何使用 Mapstruct 将枚举映射到字符串

我可以在有字符串到枚举映射的地方找到答案,但我找不到如何将枚举映射到字符串。

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)

mapstruct

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

Java 8 之后何时使用接口与抽象类

我知道这个问题已经被问过很多次了,我们在互联网上有很多文章,但我仍然无法完全理解,因为我使用的是 Java 15,我应该什么时候使用接口或抽象类。

大多数文章都讨论了之前的差异和用例Java 8,但当您基本上可以在接口中为您的方法提供主体时,这些文章是有意义的。

唯一的那对我有意义的事情是non-publicnon-final限制。

如果有人能指出我需要在 Java 15 中的接口和抽象类之间进行选择的场景的 1-2 个示例,我将非常感激。此外,如果它可以用于现实生活项目而不是动物或形状,那就太好了类示例。

谢谢 !!

java abstract-class interface

3
推荐指数
1
解决办法
125
查看次数

在 Java 中使用 Lombok 更新不可变对象?

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。

java immutability lombok

3
推荐指数
1
解决办法
3576
查看次数

如何将字符串反序列化为java Instant

我有一个 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

我该如何解决这个问题?

java gson

3
推荐指数
1
解决办法
1865
查看次数

Java-Stream - 使用过滤器和 forEach 填充集合

我有一个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 collections side-effects java-stream java-16

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