Java数据处理
·
1. 数据去重
①stream流去重(本质还是使用treeset)
public static List<UserBean> handleRepeatByStream(List<UserBean> userBeanList){
if (userBeanList == null || userBeanList.size() == 0){
return userBeanList;
}
return userBeanList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(UserBean::getName))) ,ArrayList::new));
}
②HashMap去重(利用hashMap的key值不能重复来对list去重)
public static List<UserBean> handleRepeatByHashMap(List<UserBean> userBeanList){
if (userBeanList == null || userBeanList.size() == 0){
return userBeanList;
}
Map<String, UserBean> map = new HashMap<>();
ArrayList<UserBean> list = new ArrayList<>();
userBeanList.forEach(userBean -> map.put(userBean.getName(), userBean));
map.forEach((s,userBean) -> list.add(userBean));
return list;
}
③TreeSet去重(利用set集合不可重复来对list去重)
public static List<UserBean> handleRepeatByTreeset(List<UserBean> userBeanList){
if (userBeanList == null || userBeanList.size() == 0){
return userBeanList;
}
Set<UserBean> set = new TreeSet<>(new Comparator<UserBean>() {
@Override
public int compare(UserBean o1, UserBean o2) {
return o1.getName().compareTo(o2.getName());
}
});
set.addAll(userBeanList);
return new ArrayList<>(set);
}
2. 数据过滤
①使用stream流中的filter进行过滤
public void filterByStream(List<UserBean> userList){
userList = userList.stream().filter(userBean -> userBean.getAge() > 18).collect(Collectors.toList());
}
②根据迭代器进行过滤
public void filterByInterator(List<UserBean> userList){
List<UserBean> newUserBeanList = new ArrayList<>();
Iterator<UserBean> iterator = userList.iterator();
while (iterator.hasNext()){
UserBean userBean = iterator.next();
if (userBean.getAge() > 18){
newUserBeanList.add(userBean);
}
}
}
3. 数据排序
①使用comparator比较器进行排序
public void sortByComparator(List<UserBean> userList){
Collections.sort(userList, new Comparator<UserBean>() {
@Override
public int compare(UserBean o1, UserBean o2) {
return o1.getAge - o2.getAge;
}
});
②通过实现comparable接口进行排序(被比较的对象的类需要实现comparable接口并重写compareTo方法)
public void sortByComparable(List<UserBean> userList){
Collections.sort(userList);
}
③使用stream流中的sort进行排序
public void sortByStream(List<UserBean> userList){
userList = userList.stream().sorted(Comparator.comparing(UserBean::getAge)).collect(Collectors.toList());
}
4. 数据分组
①Map集合分组
public Map<String, List<Grade>> groupByMap(List<Grade> gradeList){
Map<String, List<Grade>> map = new HashMap<>();
for (Grade grade : gradeList) {
if (!map.containsKey(grade.getClassName())){
ArrayList<Grade> list = new ArrayList<>();
list.add(grade);
map.put(grade.getClassName(),list);
}else{
map.get(grade.getClassName()).add(grade);
}
}
return map;
}
②stream流分组
public Map<String,List<Grade>> groupByStream(List<Grade> gradeList) {
HashMap<String, List<Grade>> map = new HashMap<>();
return gradeList.stream().filter(Objects::nonNull)
.collect(Collectors.groupingBy(Grade::getClassName));
}
5. 处理空指针异常
① if判断处理npe
//使用if判断的缺点是:嵌套太深,代码阅读性差
public String getCountryByIf(User user){
if (user != null) {
Company company = user.getCompany();
if (company != null){
Address address = company.getAddress();
if (address != null){
String country = address.getCountry();
return country;
}
}
}
return null;
}
② jdk8中的Optional类处理npe
private String optionalGetCountry(User user) {
return Optional.ofNullable(user)
.map(User::getCompany)
.map(Company::getAddress)
.map(Address::getCountry)
.orElse(getCountry());
}
③使用spring框架的assert断言处理
private String assertGetCountry(User user) {
Assert.notNull(user, "用户不能为空");
Company company = user.getCompany();
Assert.notNull(company, "公司不能为空");
Address address = company.getAddress();
Assert.notNull(address,"地址不能为空");
String country = address.getCountry();
return country;
}
6. Stream流使用Filter,Sort,GroupBy,Average,Sum操作List
Stream流处理数据的过程:
1. 源头:将源数据转换为Stream流对象
2. 管道:将Stream流对象进行处理,包括过滤、排序、分组,并且返回一个Stream流对象
2. 终点:最后对Stream流对象进行遍历、收集、统计等操作
①Stream流处理list集合---Filter
public List<Grade> filterByStream(List<Grade> gradeList){
return gradeList.stream()
.filter(Objects::nonNull)
.filter(grade -> grade.getEnglishScore() > 81)
.collect(Collectors.toList());
}
②Stream流处理list集合---Sort
public List<Grade> sortByStream(List<Grade> gradeList) {
return gradeList.stream()
.filter(Objects::nonNull)
.sorted(Comparator.comparing(Grade ::getChineseScore))
.collect(Collectors.toList());
}
③Stream流处理list集合---GroupBy
public Map<String,List<Grade>> groupByStream(List<Grade> gradeList) {
return gradeList.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(Grade::getSlassName));
}
④Stream流处理list集合---Average
public Double averageByStream(List<Grade> gradeList) {
return gradeList.stream()
.filter(Objects::nonNull)
.mapToInt(Grade::getChineseScore)
.average()
.orElseThrow(IllegalAccessError::new);
}
⑤Stream流处理list集合---Sum
public Integer sumBySteam(List<Grade> gradeList){
return gradeList.stream()
.filter(Objects::nonNull)
.mapToInt(Grade::getChineseScore)
.sum();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)