小编Mel*_*lih的帖子

Java流-使用GroupingBy和计数收集到地图,但是如果特定字段为空,则计数为0

为了保护这个问题免受“重复猎人”的侵扰,我需要提及的是,我并不认为我正在寻找的解决方案是过滤。我进行了搜索,从未遇到提及过滤的答案。

我有一个像这样的类的对象列表:

class Person {
  String gender;
  String income;
  String petName;
}
Run Code Online (Sandbox Code Playgroud)

我想将此列表收集到地图中,按性别分组,并计算它们拥有的宠物,如果petName为null,则当然需要传递0。

Map<String, Long> mapping = people
  .stream()
  .collect(Collectors.groupingBy(Person::gender, Collectors.counting());
Run Code Online (Sandbox Code Playgroud)

不实现Collector接口及其5种方法(因为我已经在尝试摆脱另一个自定义收集器),如果它的petName字段是,如何使它不计入对象null

我可以从Java-11中受益

java lambda functional-programming java-stream java-11

5
推荐指数
1
解决办法
100
查看次数

不使用 Hibernate 的 Java Bean 验证的替代注释

我正在开发一个项目,需要对模型的字段进行一些限制/约束(例如“字符串名称”字段不应超过 10 个字符)。我只能找到适合这项工作的 Java Bean Validation API。然而,据我所知,它与 Hibernate 和 Spring 框架一起使用。

不幸的是,项目中没有使用像 Hibernate 这样的 ORM。我们使用DAO模式和JDBI进行数据库操作。

Java 上是否有其他注释可以帮助像 Bean Validation 那样对字段施加约束(并且希望像 Lombok 那样与魔法一起工作)?我基本上需要 Size、Min/Max 和 NonNull 注释。

基本上是这样的:

class User {

  @Size(max = 10)
  String name;
}
Run Code Online (Sandbox Code Playgroud)

java validation annotations dao model

4
推荐指数
2
解决办法
8011
查看次数

单元测试(模拟)数据库,如何通过模拟验证数据库方法?

由于以前没有进行单元测试和模拟的经验,因此我跟随Mockito进行了有关JUnit的初学者教程,并进行了一些练习。

现在,我需要对一些类方法进行单元测试,这些方法在MySQL数据库上执行基本的数据库操作。我不想对数据库进行真正的更改。

在我的代码中:

@InjectMocks private DBConnection dbConnection;
@Mock private DBConnection mockDBConnection;

@Test
public void testDropTable() {

    Mockito.when(mockDBConnection.dropTable()).thenReturn(0);

    // dropTable() returns 0 if table dropped
    int result = dbConnection.dropTable();
    Assert.assertEquals(result, 0);
}
Run Code Online (Sandbox Code Playgroud)

为了验证(使用assertEquals())测试结果,我正在调用真正的dropTable()方法,并且它确实删除了表(实际上是显而易见的,因为我正在调用真正的DBConnection实例)

无论如何,是否可以在不访问真实数据库的情况下验证类似方法?还是我误解了单元测试和模拟的概念?

tdd junit unit-testing mocking mockito

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