bos项目day04快递员条件查询:ArrayList的toArray(T[] a)方法

Java List toArray方法详解与Spring Data JPA规格查询
本文详细介绍了Java中List接口的toArray方法的使用方式及其注意事项,并通过一个具体的Spring Data JPA规格查询示例展示了如何构建复杂的查询条件。

toArray

public <T> T[] toArray(T[] a)
按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回此处。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。

如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),那么会将数组中紧接 collection 尾部的元素设置为 null。( 在调用者知道列表中不包含任何 null 元素时才能用此方法确定列表长度)。

指定者:
接口 Collection<E> 中的 toArray
指定者:
接口 List<E> 中的 toArray
覆盖:
AbstractCollection<E> 中的 toArray
参数:
a - 要在其中存储列表元素的数组(如果它足够大);否则,为此分配一个具有相同运行时类型的新数组。
返回:
包含列表元素的数组
抛出:
ArrayStoreException - 如果指定数组的运行时类型不是此列表每个元素的运行时类型的超类型
NullPointerException - 如果指定数组为 null


		//构造一个specification条件接口对象,使用内部类方式创建
		Specification specification = new Specification<Courier>(){
			//重写其toPredicate方法达成为specification赋予条件的目的
			@Override
			//Root 用于获取属性字段,CriteriaQuery可以用于简单条件查询,CriteriaBuilder 用于构造复杂条件查询
			public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
				//创建集合逐个添加条件
				List<Predicate> list = new ArrayList<Predicate>();
				//简单查询
				//创建条件1:先做判断,如果获取的属性值不为空,才创建这个条件对象;属性名courierNum是否与模型驱动中取的值一致
				//StringUtils要导commons.lang3包下的
				if(StringUtils.isNotBlank(courier.getCourierNum())){
					Predicate p1 = cb.equal(root.get("courierNum").as(String.class), courier.getCourierNum());
					list.add(p1);
				}
				//创建条件2:所属单位
				if(StringUtils.isNotBlank(courier.getCompany())){
					Predicate p2 = cb.like(root.get("company").as(String.class), "%"+courier.getCompany()+"%");
					list.add(p2);
				}
				//创建条件3:取件员类型
				if(StringUtils.isNotBlank(courier.getType())){
					Predicate p3 = cb.equal(root.get("type").as(String.class), courier.getType());
					list.add(p3);
				}
				//复杂查询条件:
				//创建条件4:收派标准是否一致,利用root对象先创建join对象:对于前面的单层获取而言相当于双层获取
				//泛形是多:快递员,一:收派标准,而join方法给的是属性字段名和连接类型
				Join<Courier, Standard> standardJoin = root.join("standard", JoinType.INNER);
				if(courier.getStandard()!=null&&StringUtils.isNotBlank(courier.getStandard().getName())){
					Predicate p4 = cb.like(standardJoin.get("name").as(String.class), "%"+courier.getStandard().getName()+"%");
					list.add(p4);
				}
				//将集合转成Predicate对象返回:参数传一个Predicate数组
				//new Predicate[0]就起到一个泛型的作用:★★★???不是很明白这里
				//这里的new Predicate[0]是使用匿名内部类的多态方式创建一个Predicate接口的长度为0的数组,
				//作为list.toArray后这个数组的泛型指定,类似于Array <Predicate[]> list = new ArrayList<Predicate[]>;
				//这里面放的Predicate[]就是作为泛型参数,用于toArray方法本来就支持这种传数组作为参数的写法
				return cb.and(list.toArray(new Predicate[0]));
			}
		};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值