Java源码示例:java.util.Map
示例1
/**
* Returns an unmodifiable Map of general request
* properties for this connection. The Map keys
* are Strings that represent the request-header
* field names. Each Map value is a unmodifiable List
* of Strings that represents the corresponding
* field values.
*
* @return a Map of the general request properties for this connection.
* @throws IllegalStateException if already connected
* @since 1.4
*/
@Override
public synchronized Map<String, List<String>> getRequestProperties() {
if (connected)
throw new IllegalStateException("Already connected");
// exclude headers containing security-sensitive info
if (setUserCookies) {
return requests.getHeaders(EXCLUDE_HEADERS);
}
/*
* The cookies in the requests message headers may have
* been modified. Use the saved user cookies instead.
*/
Map<String, List<String>> userCookiesMap = null;
if (userCookies != null || userCookies2 != null) {
userCookiesMap = new HashMap<>();
if (userCookies != null) {
userCookiesMap.put("Cookie", Arrays.asList(userCookies));
}
if (userCookies2 != null) {
userCookiesMap.put("Cookie2", Arrays.asList(userCookies2));
}
}
return requests.filterAndAddHeaders(EXCLUDE_HEADERS2, userCookiesMap);
}
示例2
public @Override void paint(Graphics g) {
Object value = (Map)(Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints")); //NOI18N
Map renderingHints = (value instanceof Map) ? (java.util.Map)value : null;
if (renderingHints != null && g instanceof Graphics2D) {
Graphics2D g2d = (Graphics2D) g;
RenderingHints oldHints = g2d.getRenderingHints();
g2d.setRenderingHints(renderingHints);
try {
super.paint(g2d);
} finally {
g2d.setRenderingHints(oldHints);
}
} else {
super.paint(g);
}
}
示例3
/**
* handle a set/map of data attributes with specified notification action
*
* @param data Map of new data attributes to handle
* @param action PvChangeEvent-Action code to be used for notifications
* @param allowChildEvents are child events (for each attribute) allowed?
* @return previous value of corresponding data item
*/
@SuppressWarnings("rawtypes")
private synchronized Object handleData(Map data, int action, boolean allowChildEvents)
{
Object result = null;
if (data.containsKey(getKeyAttribute()))
{
// remember flag for event creation
boolean oldAllowEvents = allowEvents;
// set flag for event creation
allowEvents = allowChildEvents;
ProcessVar dataset = (ProcessVar) get(data.get(getKeyAttribute()));
if (dataset == null)
{
dataset = new ProcessVar();
dataset.setKeyAttribute(getKeyAttribute());
}
dataset.putAll(data, action, allowChildEvents);
// restore flag for event creation
allowEvents = oldAllowEvents;
result = put(dataset.getKeyValue(), dataset, action);
}
return (result);
}
示例4
public static Map<String, MemoryUsage> getMemoryPoolCollectionUsage() {
Map<String, MemoryUsage> gcMemory = new HashMap<String, MemoryUsage>();
for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeans) {
String name = memoryPoolMXBean.getName();
if (edenSpace.contains(name)) {
gcMemory.put("eden", memoryPoolMXBean.getCollectionUsage());
} else if (survivorSpace.contains(name)) {
gcMemory.put("survivor", memoryPoolMXBean.getCollectionUsage());
} else if (oldSpace.contains(name)) {
gcMemory.put("old", memoryPoolMXBean.getCollectionUsage());
} else if (permSpace.contains(name)) {
gcMemory.put("perm", memoryPoolMXBean.getCollectionUsage());
} else if (codeCacheSpace.contains(name)) {
gcMemory.put("codeCache", memoryPoolMXBean.getCollectionUsage());
}
}
return gcMemory;
}
示例5
@Override
public void onAssignment(TaskAssignmentResult taskAssignmentResult) {
V3QueueableTask request = (V3QueueableTask) taskAssignmentResult.getRequest();
Map<String, String> taskContext = request.getTask().getTaskContext();
if (taskContext.containsKey(TASK_ATTRIBUTES_IP_ALLOCATION_ID)) {
taskCache.addTaskIpAllocation(taskAssignmentResult.getTaskId(), taskContext.get(TASK_ATTRIBUTES_IP_ALLOCATION_ID));
}
int opportunisticCpus = request.getOpportunisticCpus();
if (request.isCpuOpportunistic() && opportunisticCpus > 0) {
String machineId = taskAssignmentResult.getHostname();
Optional<String> allocationId = opportunisticCpuCache.findAvailableOpportunisticCpus(machineId)
.map(OpportunisticCpuAvailability::getAllocationId);
if (!allocationId.isPresent()) {
codeInvariants().inconsistent("Task assigned to opportunistic CPUs on machine %s that can not be found", machineId);
}
taskCache.addOpportunisticCpuAllocation(new OpportunisticCpuAllocation(
taskAssignmentResult.getTaskId(),
machineId,
allocationId.orElse(UNKNOWN_ALLOCATION_ID),
opportunisticCpus
));
}
}
示例6
protected void commitSync(
java.util.function.BiConsumer<Consumer<String, String>, Map<TopicPartition, OffsetAndMetadata>> committer)
throws InterruptedException {
produceMessages();
try (Consumer<String, String> consumer = createConsumerWithoutAutoCommit()) {
consumer.subscribe(_topics);
pollDurationTimeout(consumer);
OffsetAndMetadata committed = consumer.committed(_topicPartition);
System.out.println("committed: " + committed);
OffsetAndMetadata committed2 = new OffsetAndMetadata(committed.offset() + _messageCount,
committed.metadata());
System.out.println("committed2: " + committed2);
Map<TopicPartition, OffsetAndMetadata> offsetMap = new HashMap<>();
offsetMap.put(_topicPartition, committed2);
committer.accept(consumer, offsetMap);
OffsetAndMetadata committed3 = consumer.committed(_topicPartition);
System.out.println("committed3: " + committed3);
Assert.assertEquals(committed2.offset(), committed3.offset());
}
}
示例7
/***
* call spark function get the schema through jdbc.
* The code logic implementation refers to spark 2.4.x and spark 3.x.
* @param options
* @return
* @throws Exception
*/
public static Schema getJDBCSchema(Map<String, String> options) throws Exception {
Connection conn = createConnectionFactory(options);
String url = options.get(JDBCOptions.JDBC_URL());
String table = options.get(JDBCOptions.JDBC_TABLE_NAME());
boolean tableExists = tableExists(conn, options);
if (tableExists) {
JdbcDialect dialect = JdbcDialects.get(url);
try (PreparedStatement statement = conn.prepareStatement(dialect.getSchemaQuery(table))) {
statement.setQueryTimeout(Integer.parseInt(options.get("queryTimeout")));
try (ResultSet rs = statement.executeQuery()) {
StructType structType;
if (Boolean.parseBoolean(options.get("nullable"))) {
structType = JdbcUtils.getSchema(rs, dialect, true);
} else {
structType = JdbcUtils.getSchema(rs, dialect, false);
}
return AvroConversionUtils.convertStructTypeToAvroSchema(structType, table, "hoodie." + table);
}
}
} else {
throw new HoodieException(String.format("%s table does not exists!", table));
}
}
示例8
public void issueSolve(List<Long> userIds, String userName, String summary, String url, Long assigneeId, Long projectId) {
NoticeSendDTO noticeSendDTO = new NoticeSendDTO();
noticeSendDTO.setCode("issueSolve");
Map<String, Object> params = new HashMap<>();
params.put(ASSIGNEENAME, userName);
params.put(SUMMARY, summary);
params.put(URL, url);
noticeSendDTO.setParams(params);
List<NoticeSendDTO.User> userList = new ArrayList<>();
for (Long id : userIds) {
NoticeSendDTO.User user = new NoticeSendDTO.User();
user.setId(id);
userList.add(user);
}
noticeSendDTO.setTargetUsers(userList);
NoticeSendDTO.User fromUser = new NoticeSendDTO.User();
fromUser.setId(assigneeId);
noticeSendDTO.setFromUser(fromUser);
noticeSendDTO.setSourceId(projectId);
try {
notifyFeignClient.postNotice(noticeSendDTO);
} catch (Exception e) {
LOGGER.error("完成issue消息发送失败", e);
}
}
示例9
/**
* This method is called whenever the connection to the {@link HueBridge} is resumed.
*
* @throws ApiException if the physical device does not support this API call
* @throws IOException if the physical device could not be reached
*/
private void onConnectionResumed() throws IOException, ApiException {
logger.debug("Bridge connection resumed. Updating thing status to ONLINE.");
if (!propertiesInitializedSuccessfully) {
FullConfig fullConfig = hueBridge.getFullConfig();
Config config = fullConfig.getConfig();
if (config != null) {
Map<String, String> properties = editProperties();
properties.put(PROPERTY_SERIAL_NUMBER, config.getMACAddress().replaceAll(":", "").toLowerCase());
properties.put(PROPERTY_FIRMWARE_VERSION, config.getSoftwareVersion());
updateProperties(properties);
propertiesInitializedSuccessfully = true;
}
}
updateStatus(ThingStatus.ONLINE);
}
示例10
@Override
public Map<String,Object> getFields()
{
Map<String,Object> result = new LinkedHashMap<String,Object>();
if ((packing_flags & 256) != 0)
{
result.put("xid", getXid());
}
if ((packing_flags & 512) != 0)
{
result.put("join", getJoin());
}
if ((packing_flags & 1024) != 0)
{
result.put("resume", getResume());
}
return result;
}
示例11
public static Object getPropertyValue(Object element, String propName, Closure2<String, Exception> errorHandler) {
if (element instanceof Map) {
return getValue((Map) element, propName);
}
try{
// Intro<?> info = getIntro(getObjectClass(element));
// PropertyDescriptor pd = info.getProperty(propName);
// return info.getPropertyValue(element, pd);
return getIntro(getObjectClass(element)).getPropertyValue(element, propName);
}catch(Exception e){
/*logger.error("get ["+element+"] property["+propName+"] error: " + e.getMessage());
if(throwIfError)
throw new BaseException("get ["+element+"] property["+propName+"] error", e);*/
errorHandler.execute(propName, e);
}
return null;
}
示例12
public static final Map<String, String> getValidAddressVOTemplate() {
Map<String, String> fields = new HashMap<String, String>();
fields.put("customerAddressName", "");
fields.put("customerLine1StreetAddress", "");
fields.put("customerLine2StreetAddress", "");
fields.put("customerCityName", "");
fields.put("customerStateCode", "");
fields.put("customerZipCode", "");
fields.put("customerCountryCode", "");
fields.put("customerAddressInternationalProvinceName", "");
fields.put("customerInternationalMailCode", "");
fields.put("customerEmailAddress", "");
fields.put("customerAddressTypeCode", "");
fields.put("customerAddressEndDate", "");
return fields;
}
示例13
/**
* {@inheritDoc}
*/
public void execute(JobExecutionContext arg0In)
throws JobExecutionException {
List<Map<String, Long>> failedRebootActions = lookupRebootActionCleanup();
for (Map<String, Long> fa : failedRebootActions) {
Long sid = fa.get("server_id");
Long aid = fa.get("action_id");
List<Long> fAids = invalidateActionRecursive(sid, aid);
for (Long fAid : fAids) {
invalidateKickstartSession(sid, fAid);
}
}
if (failedRebootActions.size() > 0) {
log.info("Set " + failedRebootActions.size() +
" reboot action(s) to failed. Running longer than 6 hours.");
}
}
示例14
private TimingInfo getTrackedInfoImpl(Map<String, Map<Integer, Long>> start, Map<String, Map<Integer, Long>> end) {
TimingInfo timingInfo = new TimingInfo();
for (Entry<String, Integer> e : moduleLevelStart.entrySet()) {
String module = e.getKey();
int level = e.getValue();
double totalTime = 0.0;
double maxTime = 0.0;
for (Integer uniqueId : end.get(module).keySet()) {
Long finish = end.get(module).get(uniqueId);
assert start.containsKey(module) : "No start for end.";
Long begin = start.get(module).get(uniqueId);
Long dur = finish - begin;
totalTime += dur;
if (dur > maxTime) {
maxTime = dur;
}
}
double avgTime = totalTime / end.get(module).size();
timingInfo.addModule(new Module(module, level, end.get(module).size(), avgTime, maxTime));
}
timingInfo.setTotalExecutionTime(overallEndTime - overallStartTime);
return timingInfo;
}
示例15
public CourseGradeComparator(final GradebookInformation gradebookInformation) {
final Map<String, Double> gradeMap = gradebookInformation.getSelectedGradingScaleBottomPercents();
this.ascendingGrades = new ArrayList<>(gradeMap.keySet());
this.ascendingGrades.sort(new Comparator<String>() {
@Override
public int compare(final String a, final String b) {
return new CompareToBuilder()
.append(gradeMap.get(a), gradeMap.get(b))
.toComparison();
}
});
}
示例16
public void testValidUseCase_01() throws Exception {
AnnotationParsedLine parsedLine = parser.parse(" \"short_bio\" = {@Assert\\NotBlank(), @Assert\\MaxLength(limit = 100, ");
assertNotNull(parsedLine);
assertEquals("", parsedLine.getName());
assertEquals("\"short_bio\" = {@Assert\\NotBlank(), @Assert\\MaxLength(limit = 100,", parsedLine.getDescription());
assertFalse(parsedLine.startsWithAnnotation());
Map<OffsetRange, String> types = parsedLine.getTypes();
assertEquals(2, types.size());
String type1 = types.get(new OffsetRange(20, 35));
assertNotNull(type1);
assertEquals("Assert\\NotBlank", type1);
String type2 = types.get(new OffsetRange(40, 56));
assertNotNull(type2);
assertEquals("Assert\\MaxLength", type2);
}
示例17
static void addOnOffAttrs(Model m, ImmutableMap.Builder<String, Object> attrs, Map<String, Object> params) {
if(params == null) {
params = ImmutableMap.of();
}
assertCapability(m, SwitchCapability.NAMESPACE);
Boolean on = (Boolean) params.get(Commands.OnOff.arg_on);
if(on == null) {
throw new ErrorEventException(Constants.Error.VALUE_OUT_OF_RANGE, Commands.OnOff.arg_on + " must be true or false");
}
String newState = on ? SwitchCapability.STATE_ON : SwitchCapability.STATE_OFF;
if(!Objects.equals(SwitchModel.getState(m), newState)) {
attrs.put(SwitchCapability.ATTR_STATE, newState);
}
}
示例18
/**
* Sets the OCSP responses. These responses are used to determine
* the revocation status of the specified certificates when OCSP is used.
*
* @param responses a map of OCSP responses. Each key is an
* {@code X509Certificate} that maps to the corresponding
* DER-encoded OCSP response for that certificate. A deep copy of
* the map is performed to protect against subsequent modification.
*/
public void setOcspResponses(Map<X509Certificate, byte[]> responses)
{
if (responses == null) {
this.ocspResponses = Collections.<X509Certificate, byte[]>emptyMap();
} else {
Map<X509Certificate, byte[]> copy = new HashMap<>(responses.size());
for (Map.Entry<X509Certificate, byte[]> e : responses.entrySet()) {
copy.put(e.getKey(), e.getValue().clone());
}
this.ocspResponses = copy;
}
}
示例19
@Test
public void testMapWithNulls() throws Exception {
Schema schema = new Schema.Parser().parse(
Resources.getResource("map_with_nulls.avsc").openStream());
File tmp = File.createTempFile(getClass().getSimpleName(), ".tmp");
tmp.deleteOnExit();
tmp.delete();
Path file = new Path(tmp.getPath());
Map<CharSequence, Integer> map = new HashMap<>();
try(AvroParquetWriter<GenericRecord> writer = new AvroParquetWriter<GenericRecord>(file, schema)) {
// Write a record with a null value
map.put(str("thirty-four"), 34);
map.put(str("eleventy-one"), null);
map.put(str("one-hundred"), 100);
GenericData.Record record = new GenericRecordBuilder(schema)
.set("mymap", map).build();
writer.write(record);
}
try(AvroParquetReader<GenericRecord> reader = new AvroParquetReader<>(testConf, file)) {
GenericRecord nextRecord = reader.read();
assertNotNull(nextRecord);
assertEquals(map, nextRecord.get("mymap"));
}
}
示例20
@Override
public Map<String, Tag> getTags() {
Map<String, Tag> map = new HashMap<>();
Collection<CompositeComponent> components = getCompositeComponentsMap().values();
for (CompositeComponent cc : components) {
map.put(cc.getName(), new LazyLoadingTag(cc));
}
return map;
}
示例21
@Test
public void testStatementPrecodeWithAnotherPrefix() throws IOException,
InterpreterException {
Properties properties = new Properties();
properties.setProperty("anotherPrefix.driver", "org.h2.Driver");
properties.setProperty("anotherPrefix.url", getJdbcConnection());
properties.setProperty("anotherPrefix.user", "");
properties.setProperty("anotherPrefix.password", "");
properties.setProperty(String.format(STATEMENT_PRECODE_KEY_TEMPLATE, "anotherPrefix"),
"set @v='statementAnotherPrefix'");
JDBCInterpreter jdbcInterpreter = new JDBCInterpreter(properties);
jdbcInterpreter.open();
Map<String, String> localProperties = new HashMap<>();
localProperties.put("db", "anotherPrefix");
InterpreterContext context = InterpreterContext.builder()
.setAuthenticationInfo(new AuthenticationInfo("testUser"))
.setInterpreterOut(new InterpreterOutput(null))
.setLocalProperties(localProperties)
.build();
String sqlQuery = "select @v";
InterpreterResult interpreterResult = jdbcInterpreter.interpret(sqlQuery, context);
assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
List<InterpreterResultMessage> resultMessages = context.out.toInterpreterResultMessage();
assertEquals(InterpreterResult.Type.TABLE, resultMessages.get(0).getType());
assertEquals("@V\nstatementAnotherPrefix\n", resultMessages.get(0).getData());
}
示例22
@Override
public Grid substituteMetaData( Map<? extends Object, ? extends Object> metaDataMap )
{
if ( metaDataMap == null || headers == null || headers.isEmpty() )
{
return this;
}
for ( int colIndex = 0; colIndex < headers.size(); colIndex++ )
{
GridHeader header = headers.get( colIndex );
// Header
Object headerMetaName = metaDataMap.get( header.getName() );
if ( headerMetaName != null )
{
header.setName( String.valueOf( headerMetaName ) );
}
if ( header.isMeta() )
{
// Column cells
substituteMetaData( colIndex, colIndex, metaDataMap );
}
}
return this;
}
示例23
@Override
public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
_name = name;
final Properties dbProps = DbProperties.getDbProperties();
final String regionId = dbProps.getProperty("region.id");
_id = 1;
if (regionId != null) {
_id = Integer.parseInt(regionId);
}
return true;
}
示例24
private void sendRakamInstallCanceledEvent(String packageName, int versionCode) {
InstallEvent installEvent = cache.get(getKey(packageName, versionCode, RAKAM_INSTALL_EVENT));
if (installEvent != null) {
Map<String, Object> data = installEvent.getData();
data.put(STATUS, "fail");
data.put(ERROR_TYPE, "canceled");
data.put(ERROR_MESSAGE, "The download was canceled");
analyticsManager.logEvent(data, RAKAM_INSTALL_EVENT, installEvent.getAction(),
installEvent.getContext());
cache.remove(getKey(packageName, versionCode, RAKAM_INSTALL_EVENT));
}
}
示例25
@Bean(name = "CLUSTER_MANAGER_INSTALL_COMPONENTS_STATE")
public Action<?, ?> clusterManagerInstallComponentsAction() {
return new AbstractClusterUpscaleAction<>(ClusterManagerInitComponentsResult.class) {
@Override
protected void doExecute(ClusterUpscaleContext context, ClusterManagerInitComponentsResult payload, Map<Object, Object> variables) {
clusterUpscaleFlowService.reinstallClusterComponents(context.getStackId());
Map<String, String> components = getInstalledComponents(variables);
ClusterManagerInstallComponentsRequest request =
new ClusterManagerInstallComponentsRequest(context.getStackId(), context.getHostGroupName(),
context.getPrimaryGatewayHostName(), components);
sendEvent(context, request.selector(), request);
}
};
}
示例26
public RelatednessFacet(final String foreQ, final String backQ,
final Map<String,Object> options) {
assert null != options;
final String f = null == foreQ ? "$fore" : "{!v='"+foreQ+"'}";
final String b = null == backQ ? "$back" : "{!v='"+backQ+"'}";
jsonData.putAll(options);
// we don't allow these to be overridden by options, so set them now...
jsonData.put("type", "func");
jsonData.put("func", "relatedness("+f+","+b+")");
}
示例27
private void updateHighLights(Editor editor) {
MarkupModel markup = editor.getMarkupModel();
for (RangeHighlighter customRangeHighlighter : newCommentHighlighters) {
markup.removeHighlighter(customRangeHighlighter);
}
newCommentHighlighters.clear();
int lineCount = markup.getDocument().getLineCount();
Map<Integer, List<Comment>> lineComments = lineComments(comments);
for (Map.Entry<Integer, List<Comment>> entry : lineComments.entrySet()) {
if (entry.getKey() > lineCount) continue;
boolean hasNewComments = false;
for (Comment comment : entry.getValue()) {
if (comment.id == null) {
hasNewComments = true;
break;
}
}
TextAttributes attributes = new TextAttributes();
if (hasNewComments) attributes.setBackgroundColor(JBColor.PINK);
else attributes.setBackgroundColor(JBColor.YELLOW);
RangeHighlighter rangeHighlighter = markup
.addLineHighlighter(entry.getKey() - 1, HighlighterLayer.SELECTION + (hasNewComments ? 2 : 1), attributes);
rangeHighlighter.setGutterIconRenderer(new CommentGutterIconRenderer());
newCommentHighlighters.add(rangeHighlighter);
}
}
示例28
@Test
public void testReadAttributesMapNoTypeBasicSize() throws IOException {
Path foo = addFile("/foo");
setContents(foo, new byte[1024]);
Map<String, Object> attributes = fileSystem.readAttributes(createPath("/foo"), "size");
Map<String, ?> expected = Collections.singletonMap("basic:size", Files.size(foo));
assertEquals(expected, attributes);
}
示例29
@Test(timeout = 60000)
public void testHostsHaveDifferentNumberStreams() {
Map<SocketAddress, Set<String>> streamDistribution = new HashMap<SocketAddress, Set<String>>();
Set<String> allStreams = new HashSet<String>();
int numHosts = 6;
int maxStreamsPerHost = 4;
int port = 1000;
for (int i = 0; i < numHosts; i++) {
int group = i / 2;
int numStreamsThisGroup = maxStreamsPerHost - group;
SocketAddress address = new InetSocketAddress("127.0.0.1", port + i);
Set<String> streams = new HashSet<String>();
for (int j = 1; j <= numStreamsThisGroup; j++) {
String streamName = "HostsHaveDifferentNumberStreams-" + i + "-" + j;
streams.add(streamName);
allStreams.add(streamName);
}
streamDistribution.put(address, streams);
}
Set<String> streamsChoosen = new HashSet<String>();
CountBasedStreamChooser chooser = new CountBasedStreamChooser(streamDistribution);
for (int i = 0; i < allStreams.size(); i++) {
String s = chooser.choose();
assertNotNull(s);
streamsChoosen.add(s);
}
assertNull(chooser.choose());
assertEquals(allStreams.size(), streamsChoosen.size());
assertTrue(Sets.difference(allStreams, streamsChoosen).isEmpty());
}
示例30
/**
* 按照父子关系排序好的 list.
*
* <ol>
* <li>如果没有传递{@code currentPath},那么渲染全部的{@code List<BreadCrumbEntity<Object>>}, <br>
* 但是如果此时的{@code List<BreadCrumbEntity<Object>>} 不是标准的面包屑树,即如果含有重复的parentId,那么会 throw {@link IllegalArgumentException}<br>
* </li>
* <li>如果设置了{@link BreadCrumbParams#setCurrentPath(String)}参数,如果没有找到{@code currentPath},什么都不会渲染;因为{@code currentPath}不在所有的面包屑中<br>
* </li>
* <li>如果设置了 {@link BreadCrumbParams#setCurrentPath(String)}参数,那么{@code currentPath} 路径,然后渲染到当前节点;<br>
* </li>
* </ol>
*
* @param <T>
* the generic type
* @param breadCrumbParams
* the bread crumb params
* @return the all parent site map entity list
*/
private static <T> List<BreadCrumbEntity<T>> lookUpCurrentBreadCrumbEntityTreeList(BreadCrumbParams breadCrumbParams){
String currentPath = breadCrumbParams.getCurrentPath();
List<BreadCrumbEntity<T>> breadCrumbEntityList = breadCrumbParams.getBreadCrumbEntityList();
//---------------------------------------------------------------
if (isNullOrEmpty(currentPath)){
//find all
Map<T, Integer> groupCount = AggregateUtil.groupCount(breadCrumbEntityList, "parentId");
for (Map.Entry<T, Integer> entry : groupCount.entrySet()){
Integer value = entry.getValue();
Validate.isTrue(value <= 1, "currentPath isNullOrEmpty,but breadCrumbEntityList has repeat parentId data!");
}
return sortOutAllParentBreadCrumbEntityList(breadCrumbEntityList);
}
//---------------------------------------------------------------
BreadCrumbEntity<T> currentBreadCrumbEntity = getBreadCrumbEntityByPath(currentPath, breadCrumbEntityList);
if (isNullOrEmpty(currentBreadCrumbEntity)){
if (LOGGER.isWarnEnabled()){
LOGGER.warn("when currentPath:{},in breadCrumbEntityList:[{}],can't find", currentPath, JsonUtil.format(breadCrumbParams));
}
return emptyList();
}
//---------------------------------------------------------------
return sortOutAllParentBreadCrumbEntityList(currentBreadCrumbEntity, breadCrumbEntityList);
}