fase()链路追踪
parent
f49fd448e5
commit
596dd3544f
|
@ -9,7 +9,6 @@ import org.springframework.context.annotation.Import;
|
|||
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 规则引擎客户端配置类
|
||||
|
@ -118,6 +117,7 @@ public class AccessConfig {
|
|||
}
|
||||
return listList;
|
||||
}
|
||||
|
||||
private Map<String, String> getColumnComments(DatabaseMetaData metaData, String typeName) {
|
||||
Map<String, String> columnComents = new HashMap<>();
|
||||
try (ResultSet colums = metaData.getColumns(null, null, typeName, null)) {
|
||||
|
|
|
@ -2,12 +2,8 @@ package muyu.data.test.clinet.config;
|
|||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import com.muyu.common.core.exception.ServiceException;
|
||||
import com.muyu.edition.constant.RuleOperationConstants;
|
||||
import com.muyu.edition.domain.Config;
|
||||
import com.muyu.edition.domain.Edition;
|
||||
import com.muyu.edition.domain.RuleEngine;
|
||||
import com.muyu.goods.edition.remote.EditionDataRemoteService;
|
||||
import com.muyu.goods.edition.remote.RemoteDataManagerService;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import muyu.data.test.clinet.config.runner.DataEditionConfigRunner;
|
||||
import muyu.data.test.common.context.DataModelContextHolder;
|
||||
|
@ -37,6 +33,7 @@ import java.util.stream.Collectors;
|
|||
public class DataEditionConfig {
|
||||
@Autowired
|
||||
private EditionDataRemoteService editionDataRemoteService;
|
||||
|
||||
public Object setColumn(TestDataModelReq testDataModelReq) {
|
||||
switch (testDataModelReq.getRuleLevel()) {
|
||||
case 2:
|
||||
|
|
|
@ -11,7 +11,6 @@ import org.springframework.boot.ApplicationRunner;
|
|||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -55,7 +54,4 @@ public class AccessConfigRunner implements ApplicationRunner {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ public class DataEditionConfigRunner implements ApplicationRunner , ApplicationC
|
|||
|
||||
/**
|
||||
* 根据环境变量来决定是否执行
|
||||
*
|
||||
* @param applicationContext the ApplicationContext object to be used by this object
|
||||
* @throws BeansException
|
||||
*/
|
||||
|
@ -39,6 +40,7 @@ public class DataEditionConfigRunner implements ApplicationRunner , ApplicationC
|
|||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
System.out.println("1");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
//获取引擎
|
||||
|
|
|
@ -7,6 +7,7 @@ import muyu.data.test.common.model.process.DataModelProcessModel;
|
|||
|
||||
/**
|
||||
* 数据模型上下文
|
||||
*
|
||||
* @ClassName DataModelContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
|
|
|
@ -6,6 +6,7 @@ import muyu.data.test.common.model.process.DataSetProcessModel;
|
|||
|
||||
/**
|
||||
* 数据集上下文
|
||||
*
|
||||
* @ClassName DataSetContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
|
|
|
@ -6,6 +6,7 @@ import muyu.data.test.common.model.process.RecordProcessModel;
|
|||
|
||||
/**
|
||||
* 记录上下文
|
||||
*
|
||||
* @ClassName RecordContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
|
|
|
@ -2,6 +2,7 @@ package muyu.data.test.common.context;
|
|||
|
||||
/**
|
||||
* 任务上下文
|
||||
*
|
||||
* @ClassName TaskContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.HashMap;
|
|||
public class DataSourceConfig {
|
||||
|
||||
private static HashMap<Long, DruidDataSource> hashMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 添加线程池
|
||||
* 线程池初始化
|
||||
|
@ -67,6 +68,7 @@ public class DataSourceConfig {
|
|||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 归还线程池
|
||||
*/
|
||||
|
@ -77,6 +79,7 @@ public class DataSourceConfig {
|
|||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 连接线程池
|
||||
* 验证线程池
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
package muyu.data.test.common.dataSoutce;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.muyu.edition.constant.RuleOperationConstants;
|
||||
import com.muyu.edition.domain.Edition;
|
||||
import com.muyu.edition.domain.RuleEngine;
|
||||
import lombok.Data;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import muyu.data.test.common.dymamicLoad.DynamicLoader;
|
||||
import org.bouncycastle.pqc.crypto.newhope.NHSecretKeyProcessor;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package muyu.data.test.common.domain.model;
|
||||
|
||||
import com.alibaba.nacos.api.annotation.NacosProperties;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
|
|
@ -2,6 +2,7 @@ package muyu.data.test.common.engine;
|
|||
|
||||
/**
|
||||
* 引擎
|
||||
*
|
||||
* @ClassName Engine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -6,6 +6,7 @@ import lombok.extern.log4j.Log4j2;
|
|||
|
||||
/**
|
||||
* 记录动作
|
||||
*
|
||||
* @ClassName ActionRecords
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/13 22:31
|
||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Setter;
|
|||
|
||||
/**
|
||||
* 移除动作
|
||||
*
|
||||
* @ClassName ActionRemove
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Setter;
|
|||
|
||||
/**
|
||||
* 替换动作
|
||||
*
|
||||
* @ClassName ActionReplace
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package muyu.data.test.common.engine.scope;
|
||||
|
||||
|
||||
|
||||
import muyu.data.test.common.context.DataModelContextHolder;
|
||||
import muyu.data.test.common.engine.Engine;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
|
@ -9,6 +8,7 @@ import muyu.data.test.common.model.process.DataModelProcessModel;
|
|||
|
||||
/**
|
||||
* 数据模型引擎
|
||||
*
|
||||
* @ClassName DataModelEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* 数据集引擎
|
||||
*
|
||||
* @ClassName DataSetEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package muyu.data.test.common.engine.scope;
|
||||
|
||||
|
||||
|
||||
import muyu.data.test.common.context.RecordContextHolder;
|
||||
import muyu.data.test.common.engine.Engine;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
|
@ -12,6 +11,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* 记录引擎
|
||||
*
|
||||
* @ClassName RecordEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
|
|
|
@ -7,6 +7,7 @@ import lombok.experimental.SuperBuilder;
|
|||
|
||||
/**
|
||||
* 数据模型
|
||||
*
|
||||
* @ClassName DataModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* 数据集模型
|
||||
*
|
||||
* @ClassName DataSetModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* 记录模型
|
||||
*
|
||||
* @ClassName RecordModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
|
|
|
@ -7,6 +7,7 @@ import muyu.data.test.common.model.DataModel;
|
|||
|
||||
/**
|
||||
* 数据模型处理模型
|
||||
*
|
||||
* @ClassName DataModelProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
|
|
|
@ -7,6 +7,7 @@ import muyu.data.test.common.model.DataSetModel;
|
|||
|
||||
/**
|
||||
* 数据集处理模型
|
||||
*
|
||||
* @ClassName DataSetProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* 记录处理模型
|
||||
*
|
||||
* @ClassName RecordProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
|
|
|
@ -5,7 +5,6 @@ import lombok.Data;
|
|||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
import org.w3c.dom.stylesheets.LinkStyle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import com.muyu.common.security.annotation.EnableMyFeignClients;
|
|||
import com.muyu.common.swagger.annotation.EnableCustomSwagger2;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
@SpringBootApplication
|
||||
|
|
|
@ -5,12 +5,11 @@ import com.muyu.common.core.domain.Result;
|
|||
import com.muyu.common.core.web.controller.BaseController;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
import muyu.data.test.common.req.TestDataModelReq;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.sql.*;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
@Log4j2
|
||||
|
@ -19,8 +18,10 @@ import java.util.List;
|
|||
public class TestController extends BaseController {
|
||||
@Autowired
|
||||
private TestService service;
|
||||
|
||||
/**
|
||||
* 随机字段
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
|
@ -31,6 +32,7 @@ public class TestController extends BaseController {
|
|||
|
||||
/**
|
||||
* 展示队列
|
||||
*
|
||||
* @param id
|
||||
* @param tableName
|
||||
* @param ruleLevel
|
||||
|
|
|
@ -10,10 +10,11 @@ import org.springframework.stereotype.Component;
|
|||
@Component
|
||||
@Log4j2
|
||||
public class Consumer {
|
||||
@Autowired
|
||||
private TestController testController;
|
||||
//队列名称
|
||||
public static final String QueueName = "edition";
|
||||
@Autowired
|
||||
private TestController testController;
|
||||
|
||||
/**
|
||||
* 监听队列
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.data.test.server;
|
||||
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
import muyu.data.test.common.req.TestDataModelReq;
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package com.data.test.server.impl;
|
||||
|
||||
import com.data.test.server.TestService;
|
||||
import com.muyu.common.core.domain.Result;
|
||||
import muyu.data.test.clinet.config.AccessConfig;
|
||||
import muyu.data.test.clinet.config.DataEditionConfig;
|
||||
import muyu.data.test.common.model.DataModel;
|
||||
|
@ -18,6 +17,7 @@ public class TestServiceImpl implements TestService {
|
|||
private AccessConfig accessConfig;
|
||||
@Autowired
|
||||
private DataEditionConfig dataEditionConfig;
|
||||
|
||||
@Override
|
||||
public List<DataModel> getRabdomData(Long id, String tableName, Integer ruleLevel) throws SQLException {
|
||||
return accessConfig.getRabdomData(id, tableName, ruleLevel);
|
||||
|
|
|
@ -29,5 +29,14 @@
|
|||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-logging</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
package com.muyu.edition.DCL;
|
||||
|
||||
import org.slf4j.MDC;
|
||||
import java.util.UUID;
|
||||
|
||||
public class MDCTraceUtil {
|
||||
/**
|
||||
* 追踪id的名称
|
||||
*/
|
||||
public static final String KEY_TRACE_ID = "traceId";
|
||||
|
||||
/**
|
||||
* 日志链路追踪id信息头
|
||||
*/
|
||||
public static final String TRACE_ID_HEADER = "x-traceId-header";
|
||||
|
||||
|
||||
/**
|
||||
* 创建traceId并赋值MDC
|
||||
*/
|
||||
public static void addTrace() {
|
||||
String traceId = createTraceId();
|
||||
// MDC(Mapped Diagnostic Context)诊断上下文映射,是@Slf4j提供的一个支持动态打印日志信息的工具。
|
||||
MDC.put(KEY_TRACE_ID, traceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋值MDC
|
||||
*/
|
||||
public static void putTrace(String traceId) {
|
||||
MDC.put(KEY_TRACE_ID, traceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取MDC中的traceId值
|
||||
*/
|
||||
public static String getTraceId() {
|
||||
return MDC.get(KEY_TRACE_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除MDC的值
|
||||
*/
|
||||
public static void removeTrace() {
|
||||
MDC.remove(KEY_TRACE_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建traceId
|
||||
*/
|
||||
public static String createTraceId() {
|
||||
return UUID.randomUUID().toString().replace("-", "");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.muyu.edition.config;
|
||||
|
||||
import com.muyu.edition.config.LogInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class LogWebMvcConfig implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
// 添加拦截器
|
||||
registry.addInterceptor(mvcInterceptor())
|
||||
// 拦截所有请求的路径
|
||||
.addPathPatterns("/**");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LogInterceptor mvcInterceptor() {
|
||||
return new LogInterceptor();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.muyu.edition.config;
|
||||
|
||||
import com.alibaba.druid.util.StringUtils;
|
||||
import com.muyu.edition.DCL.MDCTraceUtil;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class LogInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
// 客户端可以传入链路ID,需要唯一性
|
||||
String traceId = request.getHeader(MDCTraceUtil.TRACE_ID_HEADER);
|
||||
if (!StringUtils.isEmpty(traceId)) {
|
||||
MDCTraceUtil.putTrace(request.getHeader(MDCTraceUtil.TRACE_ID_HEADER));
|
||||
} else {
|
||||
MDCTraceUtil.addTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
MDCTraceUtil.removeTrace();
|
||||
}
|
||||
}
|
|
@ -31,3 +31,4 @@ spring:
|
|||
logging:
|
||||
level:
|
||||
com.muyu.edition.mapper: DEBUG
|
||||
config: classpath:logback-spring.xml
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
|
||||
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
|
||||
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
|
||||
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
<contextName>logback</contextName>
|
||||
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
|
||||
<springProperty scope="context" name="log.path" source="log.path"/>
|
||||
<!-- 彩色日志 -->
|
||||
<!-- 彩色日志依赖的渲染类 -->
|
||||
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
|
||||
<conversionRule conversionWord="wex"
|
||||
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
|
||||
<conversionRule conversionWord="wEx"
|
||||
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
|
||||
<!-- 彩色日志格式 -->
|
||||
<property name="CONSOLE_LOG_PATTERN"
|
||||
value="[traceId:%X{traceId}] ${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
|
||||
<property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
|
||||
<!--输出到控制台-->
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>debug</level>
|
||||
</filter>
|
||||
<encoder>
|
||||
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
|
||||
<!-- 设置字符集 -->
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
<!-- 滚动文件输出日志 -->
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/log.log</file>
|
||||
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 每天日志归档路径以及格式 -->
|
||||
<fileNamePattern>${log.path}/log-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
<maxHistory>15</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${PATTERN}</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<!-- 配置日志输出的方式,可以同时输出到控制台和文件 -->
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="FILE"/>
|
||||
</root>
|
||||
</configuration>
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Stream {
|
||||
private String name;
|
||||
|
||||
public static void main(String[] args) {
|
||||
List<String> list = Arrays.asList("dsf", "psd", "qw3", "dfq332", "dgw4thn","dps","dps");
|
||||
//遍历转换成大写
|
||||
List<String> collect1 = list.stream().map(String::toUpperCase).collect(Collectors.toList());
|
||||
System.out.println(collect1);
|
||||
//过滤
|
||||
List<String> collect2 = list.stream().filter(e -> !e.contains("d")).collect(Collectors.toList());
|
||||
System.out.println(collect2);
|
||||
// 10个随机数
|
||||
Random random = new Random();
|
||||
// random.ints().limit(3).forEach(System.out::println);
|
||||
// random.ints().limit(3).sorted().forEach(System.out::println);
|
||||
//使用map输出元数对应的平方数且去重
|
||||
List<Integer> integerList = Arrays.asList(1,3,5,7,9,2,4,6,8,10);
|
||||
integerList.stream().map(i -> i * i).distinct().collect(Collectors.toList());
|
||||
//取集合数据
|
||||
List<Users> usersList = new ArrayList<>();
|
||||
usersList.add(new Users("张三","男",15));
|
||||
usersList.add(new Users("李四","男",23));
|
||||
usersList.add(new Users("王五","男",18));
|
||||
Map<String, Users> hashMap = new HashMap<>();
|
||||
List<Map<String,Users>> list1 = new ArrayList<>();
|
||||
for (int i = 1; i <= usersList.size(); i++) {
|
||||
hashMap.put(i+"",usersList.get(i-1));
|
||||
list1.add(hashMap);
|
||||
}
|
||||
System.out.println(list1);
|
||||
List<Users> collect = list1.stream().map(item -> item.get("1")).collect(Collectors.toList());
|
||||
System.out.println(collect.get(0));
|
||||
//将一个对象的集合转换为另一个对象的集合
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
public class Users {
|
||||
private String name;
|
||||
private String sex;
|
||||
private Integer age;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getSex() {
|
||||
return sex;
|
||||
}
|
||||
|
||||
public void setSex(String sex) {
|
||||
this.sex = sex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Users{" +
|
||||
"name='" + name + '\'' +
|
||||
", sex='" + sex + '\'' +
|
||||
", age=" + age +
|
||||
'}';
|
||||
}
|
||||
|
||||
public Integer getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
public void setAge(Integer age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public Users(String name, String sex, int age) {
|
||||
this.name = name;
|
||||
this.sex = sex;
|
||||
this.age = age;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue