常用语法示例:
public static void main(String[] args) { List<OrderInfo> orderInfoList = Lists.newArrayList(); List<OperateInfo> operateInfoList = Lists.newArrayList(); //operateInfoList转map(key:operateId value:operateName) Map<Integer, String> operateMap = operateInfoList.stream().collect(Collectors. toMap(OperateInfo::getOperateId, OperateInfo::getOperateName, (x, y) -> x)); //orderInfoList分组(key:type value:List<OrderInfo>) Map<Integer, List<OrderInfo>> orderInfoGroup = orderInfoList.stream() .filter(order -> order.getType() != null) .collect(Collectors.groupingBy(OrderInfo::getType)); List<List<OrderInfoResponse>> result = new ArrayList<>(); orderInfoGroup.values().forEach(list -> { //根据orderId递减 list = list.stream().sorted(Comparator.comparing(OrderInfo::getOrderId).reversed()).collect(Collectors.toList()); //List<OrderInfo>转List<OrderInfoResponse> List<OrderInfoResponse> responses = list.stream().map(order -> { OrderInfoResponse response = new OrderInfoResponse(); response.setOrderId(order.getOrderId()); response.setTypeName(OrderTypeEnum.getNameByCode(order.getType())); response.setCreatorName(operateMap.get(order.getCreatorId())); return response; }).collect(Collectors.toList()); result.add(responses); }); //orderInfoList第一个type为TYPE1的对象 OrderInfo orderInfo = orderInfoList.stream() .filter(order -> OrderTypeEnum.TYPE1.getCode().equals(order.getType())) .findFirst().orElse(null); }
Bean:
@Data public class OrderInfo { private Integer id; private Integer type; private Integer operatorId; }
@Data public class OrderInfoResponse { private Integer id; private Integer type; private String typeName; private Integer operatorId; private String operatorName; }
@Data public class OperatorInfo { private Integer operatorId; private String operatorName; }
public enum OrderTypeEnum { TYPE1(1,"类型1"), TYPE2(2,"类型2"); private Integer code; private String name; OrderTypeEnum(Integer code, String name) { this.code = code; this.name = name; } public Integer getCode() { return code; } public String getName() { return name; } public static String getNameByCode(Integer code) { for (OrderTypeEnum typeEnum : OrderTypeEnum.values()) { if (typeEnum.code.equals(code)) { return typeEnum.name; } } return ""; } }
util:
@Slf4j public class Safes { public static <T> List<T> of(List<T> source) { return (List)Optional.ofNullable(source).orElse(Lists.newArrayListWithCapacity(0)); } public static <T> Set<T> of(Set<T> source) { return (Set)Optional.ofNullable(source).orElse(Sets.newHashSetWithExpectedSize(0)); } }
tips:
1,list集合为null时,list.stream()会抛异常。用 Safes.of() 方法将集合由null转为空集合。