比如我们现在拿到两个list 数据 ,一个是 User List 集合 ;另一个是 UserMemo List集合;
我们需要遍历 User List ,然后根据 userId 从 UserMemo List 里面取出 对应这个userId 的 content 值,做数据处理。
代码 User.java :
import lombok.Data;
@Data publicclassUser{ private Long userId; private String name; }
代码 UserMemo.java :
import lombok.Data;
@Data publicclassUserMemo{ private Long userId; private String content; }
模拟 数据集合 :
5W 条 user 数据 , 3W条 userMemo数据
publicstatic ListgetUserTestList(){ List users = new ArrayList<>(); for (int i = 1; i <= 50000; i++) { User user = new User(); user.setName(UUID.randomUUID().toString()); user.setUserId((long) i); users.add(user); } return users; }
publicstatic ListgetUserMemoTestList(){ List userMemos = new ArrayList<>(); for (int i = 30000; i >= 1; i--) { UserMemo userMemo = new UserMemo(); userMemo.setContent(UUID.randomUUID().toString()); userMemo.setUserId((long) i); userMemos.add(userMemo); } return userMemos; }
先看平时大家不注意的时候可能会这样去写代码处理 :
“
ps:其实数据量小的话,其实没多大性能差别,不过我们还是需要知道一些技巧点。
代码:
publicstaticvoidmain(String[] args){ List userTestList = getUserTestList(); List userMemoTestList = getUserMemoTestList();
StopWatch stopWatch = new StopWatch(); stopWatch.start();
for (User user : userTestList) { Long userId = user.getUserId(); for (UserMemo userMemo : userMemoTestList) { if (userId.equals(userMemo.getUserId())) { String content = userMemo.getContent(); System.out.println("模拟数据content 业务处理......"+content); } } }
其实到这,插入个题外点,如果说每个userId 在 UserMemo List 里面 都是只有一条数据的场景。
for (User user : userTestList) { Long userId = user.getUserId(); for (UserMemo userMemo : userMemoTestList) { if (userId.equals(userMemo.getUserId())) { String content = userMemo.getContent(); System.out.println("模拟数据content 业务处理......"+content);