学习效果
一、数据准备
1、类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author lt
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RadiusAppIncrementalItemModel implements Comparable<RadiusAppIncrementalItemModel> {
private String name;
private String typeName;
private long value;
private double rate;
private long time;
@Override
public int compareTo(RadiusAppIncrementalItemModel o) {
return (int) (o.time - this.time);
}
}
2、数据
private static List<RadiusAppIncrementalItemModel> outAllDataList = new ArrayList<>();
static {
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel1 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220405);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel2 = new RadiusAppIncrementalItemModel("vpn","",5,0,20220406);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel3 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220407);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel4 = new RadiusAppIncrementalItemModel("vpn","",2,0,20220408);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel5 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220409);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel6 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220410);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel7 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220411);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel8 = new RadiusAppIncrementalItemModel("vpn","",8,0,20220412);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel9 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220413);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel11 = new RadiusAppIncrementalItemModel("QQ","qq",5,0,20220405);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel21 = new RadiusAppIncrementalItemModel("QQ","qq",4,0,20220406);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel31 = new RadiusAppIncrementalItemModel("QQ","qq",2,0,20220407);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel41 = new RadiusAppIncrementalItemModel("QQ","qq",4,0,20220408);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel51 = new RadiusAppIncrementalItemModel("QQ","",10,0,20220409);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel61 = new RadiusAppIncrementalItemModel("QQ","",5,0,20220410);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel71 = new RadiusAppIncrementalItemModel("QQ","",4,0,20220411);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel81 = new RadiusAppIncrementalItemModel("QQ","",2,0,20220412);
RadiusAppIncrementalItemModel radiusAppIncrementalItemModel91 = new RadiusAppIncrementalItemModel("QQ","",1,0,20220413);
outAllDataList.add(radiusAppIncrementalItemModel1);
outAllDataList.add(radiusAppIncrementalItemModel2);
outAllDataList.add(radiusAppIncrementalItemModel3);
outAllDataList.add(radiusAppIncrementalItemModel4);
outAllDataList.add(radiusAppIncrementalItemModel5);
outAllDataList.add(radiusAppIncrementalItemModel6);
outAllDataList.add(radiusAppIncrementalItemModel7);
outAllDataList.add(radiusAppIncrementalItemModel8);
outAllDataList.add(radiusAppIncrementalItemModel9);
outAllDataList.add(radiusAppIncrementalItemModel11);
outAllDataList.add(radiusAppIncrementalItemModel21);
outAllDataList.add(radiusAppIncrementalItemModel31);
outAllDataList.add(radiusAppIncrementalItemModel41);
outAllDataList.add(radiusAppIncrementalItemModel51);
outAllDataList.add(radiusAppIncrementalItemModel61);
outAllDataList.add(radiusAppIncrementalItemModel71);
outAllDataList.add(radiusAppIncrementalItemModel81);
outAllDataList.add(radiusAppIncrementalItemModel91);
}
二、开始学习
1、使用stream将多个相同名称name合并成一个,并求合并后的value之和
List<RadiusAppIncrementalItemModel> lists = outAllDataList.stream().collect(Collectors.toMap(RadiusAppIncrementalItemModel::getName, a->a,(o1, o2)->{
o1.setValue(o1.getValue()+o2.getValue());
return o1;
})).values().stream().collect(Collectors.toList());
System.out.println("1、stream合并相同名称后value之和:"+lists);
2、使用stream获取应用名称后,去重
List<String> AppNameLists = lists.stream().map(RadiusAppIncrementalItemModel::getName).collect(Collectors.toList());
Set<String> nameSet = Sets.newHashSet();
nameSet.addAll(AppNameLists);
System.out.println("2、stream获取应用名称后,去重:"+nameSet);
3、使用stream求集合value之和
long sum = lists.stream().mapToLong(RadiusAppIncrementalItemModel::getValue).sum();
System.out.println("3、stream求集合value之和:"+sum);
4、使用stream根据类型名称聚合
Map<String, List<RadiusAppIncrementalItemModel>> collect = outAllDataList.stream().collect(Collectors.groupingBy(RadiusAppIncrementalItemModel::getTypeName));
System.out.println("4、stream根据类型名称聚合:"+collect);
5、使用stream过滤类型为空的数据
List<RadiusAppIncrementalItemModel> longMap = outAllDataList.stream().filter(s -> s.getTypeName() != null || s.getTypeName() != "").collect(Collectors.toList());
System.out.println("5、stream过滤类型为空的数据:"+longMap);
6、使用stream对名称相同的数累加,作用同1
Map<String, Long> lists2 = outAllDataList.stream().collect(Collectors.groupingBy(s -> s.getName().toString(), Collectors.summingLong(s -> s.getValue())));
System.out.println("6、stream对名称相同的数累加,作用同1:"+lists2);
7、使用stream将多个相同名称name合并成一个,并求合并后的value之和
List<RadiusAppIncrementalItemModel> lists = outAllDataList.stream().collect(Collectors.toMap(RadiusAppIncrementalItemModel::getName, a->a,(o1, o2)->{
o1.setValue(o1.getValue()+o2.getValue());
return o1;
})).values().stream().collect(Collectors.toList());
System.out.println("1、stream合并相同名称后value之和:"+lists);
8、使用stream获取应用名称后,去重,作用同2
List<String> name = outAllDataList.stream().map(product -> "'" + product.getName() + "'").distinct().collect(Collectors.toList());
System.out.println("8、stream获取应用名称后,去重,作用同2:"+ name);
9、使用stream指定字段排序
lists=outAllDataList.stream().sorted(Comparator.comparing(RadiusAppIncrementalItemModel::getValue).reversed()).collect(Collectors.toList());
System.out.println("9、stream指定字段排序:"+lists);