首页 > 编程语言 >Java:通过当前path(1,1_1,1_1_1)获取上一级或下一级

Java:通过当前path(1,1_1,1_1_1)获取上一级或下一级

时间:2024-12-28 12:00:37浏览次数:5  
标签:Node Java 一级 list getSortIndex add new path 0L

package com.kingbal.king.dmp;

import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.Comparator;
import java.util.List;
import java.util.Optional;

/**
 * <b>Function: </b> todo
 *
 * @program: 通过当前path获取上一级或下一级
 * @Package: com.kingbal.king.dmp
 * @author: dingcho
 * @date: 2024/12/23
 * @version: 1.0
 * @Copyright: 2024 www.kingbal.com Inc. All rights reserved.
 */
@Slf4j
public class BaseTest {

	public static void main(String[] args) {
		List<Node> list = Lists.newArrayList();

		list.add(new Node(0L, "1"));
		list.add(new Node(0L, "2"));
		list.add(new Node(0L, "3_1"));
		list.add(new Node(0L, "3_1_1"));
		list.add(new Node(0L, "3"));
		list.add(new Node(0L, "4"));
		list.add(new Node(0L, "4_1"));
		list.add(new Node(0L, "4_1_1"));
		list.add(new Node(0L, "4_1_1_1"));
		list.add(new Node(0L, "4_2"));
		list.add(new Node(0L, "4_2_1"));
		list.add(new Node(0L, "4_2_1_1"));

		Node node = getLast(list, "4_1", true);
		System.out.println(node);

		// System.out.println("4_1".indexOf("4"));
	}

	public static Node getLast(List<Node> list, String path , boolean isLast){
		Node node = new Node();
		String splitStr ="_";
		List<Node> listPeekList = list.stream().peek(item -> {
			String sortIndex = item.getPath().replace(splitStr, "");
			item.setSortIndex(Long.valueOf(sortIndex));
		}).toList();

		Optional<Node> currentNodeOptional = listPeekList.stream().filter(f-> f.getPath().equals(path)).findFirst();

		if(currentNodeOptional.isPresent()) {
			Node currentNode = currentNodeOptional.get();
			Optional<Node> lastNodeOptional;
			if (!path.contains(splitStr)) {
				listPeekList = listPeekList.stream().filter(f -> !f.getPath().contains(splitStr)).
						sorted(Comparator.comparingLong(Node::getSortIndex)).toList();
				if (isLast) {
					lastNodeOptional = listPeekList.stream()
							.filter(f -> f.getSortIndex() < currentNode.getSortIndex())
							.sorted(Comparator.comparingLong(Node::getSortIndex).reversed()).findFirst();
				} else {
					lastNodeOptional = listPeekList.stream().filter(f -> f.getSortIndex() >
							currentNode.getSortIndex()).findFirst();
				}

			} else {
				String prefixStr = path.substring(0, path.indexOf(splitStr));
				System.out.println(prefixStr);
				listPeekList = listPeekList.stream().filter(f -> f.getPath().indexOf(prefixStr) == 0).
						sorted(Comparator.comparingLong(Node::getSortIndex)).toList();
				if (isLast) {
					lastNodeOptional = listPeekList.stream()
							.filter(f -> f.getSortIndex() < currentNode.getSortIndex())
							.sorted(Comparator.comparingLong(Node::getSortIndex).reversed()).findFirst();
				} else {
					lastNodeOptional = listPeekList.stream().filter(f -> f.getSortIndex() >
							currentNode.getSortIndex()).findFirst();
				}
			}
			if (lastNodeOptional.isPresent()) {
				return lastNodeOptional.get();
			}
		}
		return node;

	}

}

@Data
@AllArgsConstructor
class Node{

	private Long sortIndex;
	private String path;

	public Node(){}
}

标签:Node,Java,一级,list,getSortIndex,add,new,path,0L
From: https://blog.csdn.net/yao_guai/article/details/144655562

相关文章

  • 人才公寓系统|Java|SSM|JSP| 
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 考研互学互助系统|Java|SSM|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apacheto......
  • Java动态规划算法
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产......
  • 【Java并发】线程池的原理和使用
    目录什么是线程池为什么要用线程池(线程池的优势)创建线程池(三大方法)方法一:newFixedThreadPool(int)案例特点方法二:newsSingleThreadExecutor()案例特点方法三:newCachedThreadPool()案例特点自定义线程池(七大参数)1.corePoolSize(核心线程数)2.maximumPoolSize(最大......
  • 探索 Java 中的 HashMap
    在Java的开发中,HashMap 是一个非常常用且重要的数据结构。它实现了 Map接口,以键值对(key-valuepair)的形式存储数据,并通过 哈希表(HashTable) 来实现高效的存储和查找。本文将深入探讨 HashMap 的核心功能、使用场景、底层原理和注意事项。1.什么是HashMap?......
  • [Java SE] 核心源码精讲:java.net.URLConnection
    概述:URLConnectionURLConnection是一个抽象类,表示指向URL【指定资源】的活动连接URLConnection可以检查服务器发送的首部,并相应地做出响应。它可以设置客户端请求中使用的首部字段。URLConnection可以用POST、PUT和其他HTTP请求方法向服务器发回数据;URLConnection类是J......
  • java中各种字符编码通过字节向16进制的互转:UTF8|GBK|unicode 字符串<=>字节<=>16进制字符
    文章目录引言I16进制、字节、编码字符之间的转换前提16进制格式字符串‌16进制格式字符串的应用场景转换原理转换流程:字符串<=>字节<=>16进制java中编码的转换APIII其他例子TCP协议字段编码基于netty实现TCP的编码设置将16进制字符串转换为字符串......
  • 基于Java的博物馆数字化网络平台
    计算机毕业设计案例Java毕业设计案例ASP.NET毕业设计案例PHP毕业设计案例微信小程序毕业设计案例基于Java的小程序自习室预约管理系统JavaSpringboot智能膳食咨询系统【12/15/02】ThinkPHP实验教学管理系统–2024计算机毕业设计Java物业管理小程序的设计与实现基于Java的......
  • java核心基础 第六章 锁
    在现实生活中,人们对锁的期望是,它能对某些事物形成一个屏障,除了上锁者外,谁也不能碰到这些事物。比如我在大街上看见了一块金子,我立刻拿来一个透明箱子,把这块金子放在箱子里然后把这个箱子锁上。假设这个箱子和锁都是绝对坚固的,只有我能打开。这个时候走在大街上的人们无论多想得......
  • javaWeb开发
    JavaWeb开发作为软件开发领域的一个重要分支,已经历经数十年的发展,并凭借其强大的跨平台能力、丰富的生态系统以及高度的安全性,成为构建企业级应用的首选技术之一。以下是对JavaWeb开发的详细解析:一、JavaWeb开发的基本概念JavaWeb开发是指使用Java语言及其相关技术栈......