一些代码注解
List<String> tagList = gson.fromJson(tags, new TypeToken<List<String>>(){}.getType());
- ``Gson` 是 Google 提供的用于转换 Java 对象和 JSON 表示之间的一个简单轻量级库。
- new TypeToken<List
>(){}.getType() 创建了一个匿名内部类的实例来捕获泛型类型信息
List,然后通过
getType()获取该类型的
Type对象。这是因为 Java 的泛型在运行时会擦除类型信息(即类型擦除),所以需要这样的方法来保留实际的泛型类型信息,以便
Gson` 可以正确地反序列化数据。
List<Pair<User, Long>> topUserPairList = list.stream().sorted((a, b) -> (int) (a.getValue() - b.getValue())).limit(num).collect(Collectors.toList());
其中sorted((a, b) -> (int) (a.getValue() - b.getValue()))
内部小于0是升序和写排序方法一致
方法引用 vs. Lambda 表达式
- 方法引用 (
TeamUserVO::getId
):这是一种更为简洁的写法,当你要调用的方法已经存在并且符合函数式接口的要求时可以使用。它直接引用了类的静态方法、实例方法或构造器。 - Lambda 表达式 (
team -> team.getId()
):提供了更大的灵活性,允许你编写更复杂的逻辑。在这个例子中,lambda 表达式接收一个team
参数并调用它的getId()
方法。
final List<Long> teamIdList = teamList.stream().map(team -> team.getId()) // 使用Lambda表达式 .collect(Collectors.toList());final List<Long> teamIdList = teamList.stream().map(TeamUserVO::getId) // 使用方法引用 .collect(Collectors.toList());
重复加入队伍的问题
只要我们点的足够快,就可以在同一时间内往数据库插入多条同样的数据,所以这里我们使用分布式锁(推荐)使用两把锁,一把锁锁队伍,一把锁锁用户(实现较难,不推荐)