谷神后端列表算法:多维列表扁平化与重构

扁平化
/**
 * flatten
 * 多维列表展开:扁平化
 *
 * @param $list:list:列表
 *
 * @return list
 *
 */
#function flatten ($list)
	#if ($vs.util.isList($list))
		#set($result = $vs.util.newList())
		#foreach ($row in $list)
			$result.addAll($row)
		#end
		return $result
	#end
	return null
#end
递归扁平化
/**
 * recursionFlatten
 * 多维列表展开:扁平化。
 * 递归
 * 
 * @param $list:list:列表。
 *
 * @return list
 *
 */
#function recursionFlatten($list)
	#if ($vs.util.isList($list))
		#set($result = $vs.util.newList())
		#foreach ($row in $list)
			#if ($vs.util.isList($row))
				$result.addAll(@recursionFlatten($row))
			#else
				$result.add($row)
			#end
		#end
		return $result
	#end
	return null
#end
重构:合并模式
/**
 * reconstructionForMerge
 * 扁平化多维列表重构:合并模式。
 *
 * @param $list:列表。
 * @param $primaryKey:string:主键。
 * @param $commons:list:父级属性。
 * @param $fields:list:子级属性。
 *
 * @return $list
 *
 */
#function reconstructionForMerge($list, $primaryKey, $commons, $fields)
	#if ($vs.util.isList($list))
		#if ($vs.util.isNull($primaryKey))
			return null
		#end
		#if (!$vs.util.isList($commons) or !$vs.util.isList($fields))
			return null
		#end
		#set($result = $vs.util.newList())
		#set($parent = null)
		#set($childs = null)
		#foreach ($row in $list)
			#if ($vs.util.isNotNull($row.get($primaryKey)))
				#set($parent = @clone($row, $commons))
				$result.add($parent)
				#set($childs = $vs.util.newList())
				#set($parent.childs = $childs)
			#end
			#set($child = @clone($row, $fields))
			$childs.add($child)
		#end
		return $result
	#end
	return null
#end
重构数据结构校验:合并模式
/**
 * checkForMergeReconstruction
 * 扁平化多维列表重构数据结构校验:合并模式。
 *
 * @param $list:列表。
 * @param $primaryKey:string:主键。
 * @param $commons:list:父级属性。
 *
 * @return $list
 *
 */
#function checkForMergeReconstruction($list, $primaryKey, $commons)
	#if ($vs.util.isList($list))
		#if ($vs.util.isNull($primaryKey))
			return null
		#end
		#if (!$vs.util.isList($commons) or !$vs.util.isList($fields))
			return null
		#end
		#set($result = $vs.util.newMap())
		#foreach ($row in $list)
			#if ($vs.util.isNull($row.get($primaryKey)))
				#foreach ($common in $commons)
					#if ($vs.util.isNotNull($row.get($common)))
						#set($rowIndex = $index)
						#set($errors = $result.get($index))
						#if (!$vs.util.isList($errors))
							#set($errors = $vs.util.newList())
							$result.put($rowIndex, $errors)
						#end
						$errors.add($common)
					#end
				#end
			#end
		#end
		return $result
	#end
	return null
#end
/**
 * structErrorMap2structErrorMessageMap
 * 扁平化多维列表重构数据结构校验消息处理:合并模式。
 *
 * @param $structErrorMap:map:错误信息。
 * @param $initIndex:number:初始索引。
 * @param $map:map:映射。
 *
 * @return $structErrorMessageMap:map:错误消息。
 *
 */
#function structErrorMap2structErrorMessageMap($structErrorMap, $initIndex, $map)
	#if ($vs.util.isMap($structErrorMap))
		#if ($vs.util.isNull($initIndex))
			#set($initIndex = 0)
		#end
		#if ($vs.util.isNull($map))
			#set($map = $vs.util.newMap())
		#end
		#set($structErrorMessageMap = $vs.util.newMap())
		#foreach ($key in $vs.util.getMapKeys($structErrorMap))
			#set($errors = $structErrorMap.get($key))
			#set($errorMessages = $vs.util.newList())
			#foreach ($error in $errors)
				#set($rowIndex = $initIndex + $key)
				#set($errorStr = $map.get($error))
				#if ($vs.util.isNull($errorStr))
					#set($errorStr = $error)
				#end
				#set($errorMessage = '第' + $rowIndex + '行“' + $errorStr + '”合并单元格不正确!')
				$errorMessages.add($errorMessage)
			#end
			$structErrorMessageMap.put($key, $errorMessages)
		#end
		return $structErrorMessageMap
	#end
	return null
#end
公共引用
/**
 * clone
 * 数据克隆。
 *
 * @param $src:源数据。
 * @param $options:克隆选项。
 *
 * @return data
 *
 */
#function clone($src, $options)
	#if ($vs.util.isString($options))
		#set($options = $vs.util.fromJson($options))
	#end
	#if ($vs.util.isMap($src))
		#set($result = $vs.util.newMap())
		#if ($vs.util.isMap($options))
			#foreach ($key in $vs.util.getMapKeys($options))
				$result.put($options.get($key), $src.get(key))
			#end
		#end
		#if ($vs.util.isList($options))
			#foreach ($key in $options)
				$result.put($key, $src.get($key))
			#end
		#end
		return $result
	#end
	#if ($vs.util.isList($src))
		#set($result = $vs.util.newList())
		#foreach ($item in $src)
			$result.add(@clone($item, $options))
		#end
	#end
	return null
#end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值