Java は、List<String> をフィルター条件として List<YourEntity> リストをインテリジェントに更新するメソッドを開発します (実際の戦闘コードを使用)

文章:

実際のソフトウェア開発プロジェクトでは、開発者リストを更新して維持することが必要になることがよくあります。この記事では、Java を使用して、要件に応じて開発者リストの一括削除および追加操作を実行するインテリジェントなメソッドを作成する方法を紹介します。同時に、理解を容易にするために、具体的なコード例を添付します。

バックグラウンド

userList開発者のユーザー ID を格納するリストと、開発者に関連するレコードを含むデータベース テーブルがあるとしますstProjectDevelopments私たちの目標は、からのuserList更新に基づいて、のユーザー IDstProjectDevelopmentsとレコードの一貫性を保つことですuserList

1. 解決策

このスマート アップデート メソッドを次のように実装します。

1. 既存のレコードを取得する

まず、データベース クエリ操作を使用してstProjectDevelopmentsテーブルからすべてのレコードを取得し、stProjectDevelopmentsリストに格納します。

//查询该项目下的所有开发人员
LambdaQueryWrapper<StProjectDevelopment> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StProjectDevelopment::getProjectId,projectId);
List<StProjectDevelopment> stProjectDevelopments = stProjectDevelopmentMapper.selectList(wrapper);

2. 重複したユーザーを削除する

次に、データベース内の冗長なレコード、つまりstProjectDevelopmentsリストには存在するuserListが存在しないユーザーを削除する必要があります。これを達成するために、existingUserIds(stProjectDevelopmentsリストから抽出されたユーザー ID のリスト) と を比較しuserList、どのユーザー ID のリストを削除する必要があるかを見つけますuserIdsToDelete

冗長ユーザーを削除するコード例を次に示します。

List<StProjectDevelopment> developmentsToDelete = stProjectDevelopments.stream()
    .filter(development -> !userList.contains(development.getUserId()))
    .collect(Collectors.toList());

if (!developmentsToDelete.isEmpty()) {
    
    
    List<Integer> idsToDelete = developmentsToDelete.stream()
        .map(StProjectDevelopment::getId)
        .collect(Collectors.toList());

    stProjectDevelopmentMapper.deleteBatchIds(idsToDelete);
}

3. 不足しているユーザーを追加する

ここで、リストuserListには存在するがリストに存在しないユーザーを追加する必要があります。stProjectDevelopments削除操作と同様に、追加する必要があるユーザー ID のリストを比較して見つけuserListますexistingUserIdsuserIdsToAdd

不足しているユーザーを追加するコード例を次に示します。

List<String> userIdsToAdd = userList.stream()
    .filter(userId -> !existingUserIds.contains(userId))
    .collect(Collectors.toList());

if (!userIdsToAdd.isEmpty()) {
    
    
    List<StProjectDevelopment> newDevelopments = userIdsToAdd.stream()
        .map(userId -> {
    
    
            StProjectDevelopment development = new StProjectDevelopment();
            development.setUserId(userId);
            // 设置其他字段的初始值
            return development;
        })
        .collect(Collectors.toList());

    stProjectDevelopmentMapper.insertBatch(newDevelopments);
}

2. コード例

上記のソリューションを 1 つのメソッドにラップする方法を示す完全な例を次に示します。

/**
  * 筛选修改的开发人员
  *
  * @param userList  原项目开发用户列表
  * @param projectId 项目ID
  * @author yangz
  * @date 2023/07/12
  */
public void updateStProjectDevelopments(List<String> userList,String projectId, String currentUserId) {
    
    
    //查询该项目下的所有开发人员
    LambdaQueryWrapper<StProjectDevelopment> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(StProjectDevelopment::getProjectId,projectId);
    List<StProjectDevelopment> stProjectDevelopments = stProjectDevelopmentMapper.selectList(wrapper);

    //筛选出所有的userId列表
    List<String> existingUserIds = stProjectDevelopments.stream()
        .map(StProjectDevelopment::getUserId)
        .collect(Collectors.toList());

    // 删除多余的用户
    List<StProjectDevelopment> developmentsToDelete = stProjectDevelopments.stream()
        .filter(development -> !userList.contains(development.getUserId()))
        .collect(Collectors.toList());
    if (!developmentsToDelete.isEmpty()) {
    
    
        List<String> userIdsToDelete = developmentsToDelete.stream()
            .map(StProjectDevelopment::getId)
            .collect(Collectors.toList());
        stProjectDevelopmentMapper.deleteBatchIds(userIdsToDelete);
    }

    // 新增缺少的用户
    List<String> userIdsToAdd = userList.stream()
        .filter(userId -> !existingUserIds.contains(userId))
        .collect(Collectors.toList());
    if (!userIdsToAdd.isEmpty()) {
    
    
        List<StProjectDevelopment> newDevelopments = userIdsToAdd.stream()
            .map(userId -> {
    
    
                StProjectDevelopment development = new StProjectDevelopment();
                //对象参数赋值
                stProjectDevelopmentSetParam(currentUserId, projectId, userId, development);
                return development;
            })
            .collect(Collectors.toList());
        stProjectDevelopmentMapper.batchInsert(newDevelopments);
    }
}

要約する

実際のプロジェクト開発では、このインテリジェントなリスト更新方法により、開発者の変更をより効率的に処理し、データベース レコードの一貫性を維持することができます。サンプル コードを使用すると、この記事のソリューションをより深く理解し、適用することができます。

この記事が、効率的でスマートな開発者リスト更新方法の作成に役立つことを願っています。

おすすめ

転載: blog.csdn.net/Da_zhenzai/article/details/131694092