Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void update(List<Block> blocks, List<BlockDTO> blockDTOs) {
- /* REMIND[2017-06-13][Marcus Lin]
- * 更新 blocks
- * 1. 首先判断 blockDTOs 它们的 id 是否全为空,是的话说明原有的 blocks 被清空了,这些 blockDTOs 便是新增的条目
- * 2. 若不为空,则将 blocks 和 blockDTOs 进行比对,以 blockDTOs 的顺序为标准,对 blocks 进行更新及排序,
- * 3. 最后,因为以上的排序会导致某几个 blocks 位置变动从而逃过一些判断,故再一次循环,然后移除掉 id 从未匹配到过的 blocks
- */
- if (isIdAllNull(blockDTOs)) {
- blocks.clear();
- blockDTOs.stream()
- .map(BlockUtil::toEntity)
- .forEachOrdered(blocks::add);
- } else {
- List<Long> nonNullIds = new ArrayList<>();
- // add new blocks and sort
- blockDTOs.forEach(blockDTO -> {
- if (blockDTO.getSeq() == null) {
- blocks.add(blockDTOs.indexOf(blockDTO), BlockUtil.toEntity(blockDTO));
- } else {
- nonNullIds.add(blockDTO.getSeq());
- int index = blockDTOs.indexOf(blockDTO);
- for (int i = 0; i < blocks.size(); i++) {
- if (blocks.get(i).getSeq() != null) {
- Block block = blocks.get(i);
- if (block.getSeq().equals(blockDTO.getSeq())) {
- // 如果恰巧下标相同,直接 update, 否则交换位置
- if (i == index) {
- BlockUtil.mergeToEntity(blockDTO, block);
- break;
- } else {
- Block temp = blocks.get(index);
- blocks.set(index, block);
- BlockUtil.mergeToEntity(blockDTO, blocks.get(index));
- blocks.set(i, temp);
- break;
- }
- }
- }
- }
- }
- });
- // finally loop again to remove the block whose id that never matched
- int removeFlag = 0;
- for (int i = 0; i < blocks.size(); i++) {
- if (blocks.get(i).getSeq() != null) {
- Block block = blocks.get(i);
- for (Long id : nonNullIds) {
- if (!block.getSeq().equals(id)) {
- removeFlag += 1;
- } else {
- removeFlag = 0;
- break;
- }
- }
- }
- if (removeFlag == nonNullIds.size()) {
- blocks.remove(i);
- removeFlag = 0;
- }
- }
- }
- }
- private static boolean isIdAllNull(List<BlockDTO> blockDTOS) {
- boolean isAllNull = true;
- for (BlockDTO blockDTO : blockDTOS) {
- if (blockDTO.getSeq() != null) {
- isAllNull = false;
- break;
- }
- }
- return isAllNull;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement