forked from fanruan/design
Yuan.Wang
4 years ago
3 changed files with 102 additions and 46 deletions
@ -0,0 +1,61 @@
|
||||
package com.fr.design.utils; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.base.ParameterHelper; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.ArrayUtils; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Arrays; |
||||
import java.util.Iterator; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* @Author: Yuan.Wang |
||||
* @Date: 2020/8/11 |
||||
*/ |
||||
public class ParameterUtils { |
||||
/** |
||||
* 获得新的参数集合,返回的集合中的参数的顺序为:新增参数全部放在后面,以保证原有参数的相对顺序 |
||||
* |
||||
* @param paramTexts sql语句 |
||||
* @param oldParameters 旧的参数集合 |
||||
* @return 新参数集合 |
||||
*/ |
||||
public static Parameter[] analyzeAndUnionParameters(String[] paramTexts, Parameter[] oldParameters) { |
||||
Parameter[] newParameters = ParameterHelper.analyze4Parameters(paramTexts, false); |
||||
return unionParametersInRelativeOrder(oldParameters, newParameters); |
||||
} |
||||
|
||||
/** |
||||
* 合并新旧参数集合,新增参数全部放在后面,以保证原有参数的相对顺序 |
||||
* |
||||
* @param oldParameters 旧的参数集合 |
||||
* @param newParameters 新的参数集合 |
||||
* @return 新参数集合 |
||||
*/ |
||||
private static Parameter[] unionParametersInRelativeOrder(Parameter[] oldParameters, Parameter[] newParameters) { |
||||
if (ArrayUtils.isEmpty(newParameters) || ArrayUtils.isEmpty(oldParameters)) { |
||||
return newParameters; |
||||
} |
||||
|
||||
Parameter[] result = new Parameter[newParameters.length]; |
||||
List<Parameter> newParameterList = new ArrayList<>(Arrays.asList(newParameters)); |
||||
int i = 0; |
||||
//遍历旧参数数组中的参数,如果新参数list中存在同名参数,将该参数加入到result里,同时删除list中的同名参数
|
||||
for (Parameter oldParameter : oldParameters) { |
||||
Iterator<Parameter> iterator = newParameterList.listIterator(); |
||||
while (iterator.hasNext()) { |
||||
Parameter newParameter = iterator.next(); |
||||
if (ComparatorUtils.equals(oldParameter.getName(), newParameter.getName())) { |
||||
result[i++] = oldParameter; |
||||
iterator.remove(); |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
//将新参数list中的剩余参数添加到result中
|
||||
System.arraycopy(newParameterList.toArray(new Parameter[0]), 0, result, i, newParameterList.size()); |
||||
return result; |
||||
} |
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.fr.design.utils; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.base.ParameterHelper; |
||||
import junit.framework.TestCase; |
||||
|
||||
/** |
||||
* @Author: Yuan.Wang |
||||
* @Date: 2020/8/11 |
||||
*/ |
||||
public class ParameterUtilsTest extends TestCase { |
||||
public void testAnalyzeAndUnionParameters() { |
||||
String[] paramTexts = {"${a}${b}${d}", ""}; |
||||
Parameter[] oldParameters = new Parameter[]{new Parameter("c"), new Parameter("b"), new Parameter("a")}; |
||||
Parameter[] rightResult = new Parameter[]{new Parameter("b"), new Parameter("a"), new Parameter("d")}; |
||||
Parameter[] result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); |
||||
assertEquals(result.length, rightResult.length); |
||||
for (int i = 0; i < rightResult.length; i++) { |
||||
assertEquals(rightResult[i].getName(), result[i].getName()); |
||||
} |
||||
|
||||
paramTexts = new String[]{"${a}${b}${d}", ""}; |
||||
oldParameters = new Parameter[]{}; |
||||
rightResult = new Parameter[]{new Parameter("a"), new Parameter("b"), new Parameter("d")}; |
||||
result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); |
||||
assertEquals(result.length,rightResult.length); |
||||
|
||||
paramTexts = new String[]{"${b}", ""}; |
||||
oldParameters = new Parameter[]{new Parameter("b"), new Parameter("a"), new Parameter("d")}; |
||||
rightResult = new Parameter[]{new Parameter("b")}; |
||||
result = ParameterUtils.analyzeAndUnionParameters(paramTexts, oldParameters); |
||||
assertEquals(result.length,rightResult.length); |
||||
assertEquals(result.length, rightResult.length); |
||||
for (int i = 0; i < rightResult.length; i++) { |
||||
assertEquals(rightResult[i].getName(), result[i].getName()); |
||||
} |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue