package com.zy.asrs.utils;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import static java.util.stream.Collectors.toList;
|
import com.zy.core.enums.RouteCollectCountType;
|
|
/**
|
* Created by Monkey D. Luffy on 2023/7/18
|
*/
|
public class RouteUtils {
|
|
// 正序
|
public static final List<Integer> TRACK_POSITION_POSITIVE_SEQUENCE = new ArrayList<Integer>() {{
|
add(1);add(2);add(3);add(4);add(5);add(6);add(7);add(8);add(9);add(10);add(11);add(12);
|
}};
|
// 反序
|
public static final List<Integer> TRACK_POSITION_REVERSE_SEQUENCE = new ArrayList<Integer>() {{
|
add(12);add(11);add(10);add(9);add(8);add(7);add(6);add(5);add(4);add(3);add(2);add(1);
|
}};
|
|
public static String zerofill(String msg, Integer count){
|
if (msg.length() == count){
|
return msg;
|
} else if (msg.length() > count){
|
return msg.substring(0, 16);
|
} else {
|
StringBuilder msgBuilder = new StringBuilder(msg);
|
for (int i = 0; i<count-msg.length(); i++){
|
msgBuilder.insert(0,"0");
|
}
|
return msgBuilder.toString();
|
}
|
}
|
|
// 获取当前小车未行走的路线集合
|
public static List<Integer> getRoute(Integer groupStart,Integer groupEnd){
|
boolean sign = groupStart < groupEnd;
|
List<Integer> result = new ArrayList<>();
|
List<Integer> groupRoute = null;
|
if (sign){
|
groupRoute = TRACK_POSITION_POSITIVE_SEQUENCE;
|
}else {
|
groupRoute = TRACK_POSITION_REVERSE_SEQUENCE;
|
}
|
if (groupRoute.contains(groupStart) && groupRoute.contains(groupEnd)) {
|
sign = false;
|
for (Integer route : groupRoute) {
|
if (route.equals(groupStart)){
|
sign=true;
|
}
|
if (route.equals(groupEnd)){
|
result.add(route);
|
break;
|
}
|
if (sign){
|
result.add(route);
|
}
|
}
|
}else {
|
return null;
|
}
|
return result;
|
}
|
|
//是否有交集
|
public static boolean getRouteBoolean(List<Integer> groupCurrent,List<Integer> groupOther){
|
for (Integer positionCurrent : groupCurrent){
|
for (Integer positionOther : groupOther){
|
if (positionCurrent.equals(positionOther)){
|
return true;
|
}
|
}
|
}
|
return false;
|
}
|
|
//集合运算
|
public static List<Integer> getRouteIntersection(List<Integer> groupCurrent, List<Integer> groupOther, RouteCollectCountType routeCollectCountType){
|
switch (routeCollectCountType){
|
case INTERSECTION:
|
//交集
|
return groupCurrent.stream().filter(item -> groupOther.contains(item)).collect(toList());
|
case DIFFERENCESET:
|
//差集
|
return groupCurrent.stream().filter(item -> !groupOther.contains(item)).collect(toList());
|
case UNION:
|
//并集
|
groupCurrent.addAll(groupOther);
|
return groupCurrent;
|
case DEDUPLICATIONUNION:
|
//去重并集
|
groupCurrent.addAll(groupOther);
|
return groupCurrent.stream().distinct().collect(toList());
|
default:
|
return null;
|
}
|
}
|
|
public static void main(String[] arge){
|
List<Integer> routeCurrent = getRoute(2, 9); //获取当前小车路径
|
List<Integer> routeOther = getRoute(12, 5); //获取其它小车路径
|
System.out.println("当前小车路径:\t"+routeCurrent);
|
System.out.println("其它小车路径:\t"+routeOther);
|
|
boolean routeBoolean = getRouteBoolean(routeCurrent, routeOther); //是否有交集
|
System.out.println("是否有交集:\t"+routeBoolean);
|
|
List<Integer> routeIntersection = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.INTERSECTION);//交集
|
System.out.println("路径交集:\t"+routeIntersection);
|
|
List<Integer> routeIntersection1 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DIFFERENCESET);//差集
|
System.out.println("路径差集:\t"+routeIntersection1);
|
|
List<Integer> routeIntersection2 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.UNION);//并集
|
System.out.println("路径并集:\t"+routeIntersection2);
|
|
List<Integer> routeIntersection3 = getRouteIntersection(routeCurrent, routeOther, RouteCollectCountType.DEDUPLICATIONUNION);//去重并集
|
System.out.println("路径去重并集:\t"+routeIntersection3);
|
}
|
|
}
|