package com.fr.design.file; import com.fr.design.mainframe.JTemplate; import com.fr.general.ComparatorUtils; import java.util.List; import java.util.function.Predicate; public class MultiTemplateTabUtils { /** * 计算离currentIndex最近的相同模式的模板index值(优先左边) * * @param currentIndex 当前index * @param openedTemplate 模板list * @param type 当前显示模式 * @return */ public static int calShowTemplateIndex(int currentIndex, List> openedTemplate, String type) { if (currentIndex < 0 || currentIndex > openedTemplate.size() - 1) { return -1; } int result = getShowJTemplateTab(currentIndex, openedTemplate, template -> showJTemplateTab(type, template)); if (result != -1) return result; return getShowJTemplateTab(currentIndex, openedTemplate, template -> !showJTemplateTab(type, template)); } /** * 先从左找,再从右找离得最近的满足条件的模板 * * @param currentIndex 当前index * @param openedTemplate 模板list * @param predicate * @return */ private static int getShowJTemplateTab(int currentIndex, List> openedTemplate, Predicate> predicate) { for (int i = currentIndex; i >= 0; i--) { if (predicate.test(openedTemplate.get(i))) { return i; } } for (int i = currentIndex + 1; i < openedTemplate.size(); i++) { if (predicate.test(openedTemplate.get(i))) { return i; } } return -1; } /** * 是否显示模板 * * @param type 模板类型 * @param jTemplate 模板 * @return */ private static boolean showJTemplateTab(String type, JTemplate jTemplate) { return ComparatorUtils.equals(type, jTemplate.getTemplateTabOperatorType()); } }