栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

java工作笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java工作笔记

工作笔记 java 1、去除字符串拼接后,前后逗号
    public static void main(String[] args) {
        String s = ",123,456,";
        if (s.startsWith(",")){
            s = StringUtils.removeStart(s, ",");
        }
        if (s.endsWith(",")){
            s = StringUtils.removeEnd(s, ",");
        }
        System.out.println(s);
    }
2、java 8 利用stream针对List集合根据对象属性去重

一、根据对象中某个属性去重

1、创建提取方法

private  Predicate distinctByKey(Function keyExtractor) {
    Map concurrentHashMap = new ConcurrentHashMap<>();
    return t -> concurrentHashMap.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

2、利用filter

List codeDistinctList = testCommodityList
            .stream()
            .filter(distinctByKey(TestCommodity::getCode))
            .collect(Collectors.toList());

二、根据对象中多个个属性去重,利用collectingAndThen

List cbList = testCommodityList
            .stream()
            .collect(
                    Collectors.collectingAndThen(
                            Collectors.toCollection(
                            () -> new TreeSet<>(
                                    Comparator.comparing(
                                            tc -> tc.getCode() + ";" + tc.getBarCode()))), ArrayList::new));

三、分组后取价格最高的对象

Map maxPriceCommodityMap = testCommodityList
            .stream()
            .collect(
                    Collectors.groupingBy(
                            TestCommodity::getCode,
                            Collectors.collectingAndThen(
                                    Collectors.maxBy(
                                            Comparator.comparingDouble(TestCommodity::getPrice)),Optional::get)));

四、附java8 map 遍历方法

maxPriceCommodityMap.forEach((k, v) -> System.out.println(k + ":" + v));
3、list中内容逗号拼接

方法1

String symbol = Joiner.on(",").join(symbolList);

方法2

String symbol = StringUtils.join(symbolList.toArray(), ",");
4、本地断点调试发现返回对象里面有参数,浏览器控制台没有

1.看看是不是没有编译到class文件中

2.该对象是否有get set方法

5、MyBatis执行DDL语句错误

1.排除语句错误后,看是否用#获取了数据

6、Collectors.toMap 希望value是当前对象
userList.stream().collect(Collectors.toMap(User::getId, User::getName));
userList.stream().collect(Collectors.toMap(User::getId, t -> t));
 或:
userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

关于 Collectors.toMap 方法

Collectors.toMap 有三个重载方法:

toMap(Function keyMapper, Function valueMapper);
toMap(Function keyMapper, Function valueMapper,
        BinaryOperator mergeFunction);
toMap(Function keyMapper, Function valueMapper,
        BinaryOperator mergeFunction, Supplier mapSupplier);

参数含义分别是:

  1. keyMapper:Key 的映射函数
  2. valueMapper:Value 的映射函数
  3. mergeFunction:当 Key 冲突时,调用的合并方法
  4. mapSupplier:Map 构造器,在需要返回特定的 Map 时使用

还是用上面的例子,如果 List 中 userId 有相同的,使用上面的写法会抛异常:

List userList = Lists.newArrayList(
        new User().setId("A").setName("张三"),
        new User().setId("A").setName("李四"), // Key 相同 
        new User().setId("C").setName("王五")
);
userList.stream().collect(Collectors.toMap(User::getId, User::getName));

// 异常:
java.lang.IllegalStateException: Duplicate key 张三 
    at java.util.stream.Collectors.lambda$throwingMerger$114(Collectors.java:133)
    at java.util.HashMap.merge(HashMap.java:1245)
    at java.util.stream.Collectors.lambda$toMap$172(Collectors.java:1320)
    at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at Test.toMap(Test.java:17)
    ...

这时就需要调用第二个重载方法,传入合并函数,如:

userList.stream().collect(Collectors.toMap(User::getId, User::getName, (n1, n2) -> n1 + n2));

// 输出结果:
A-> 张三李四 
C-> 王五 

第四个参数(mapSupplier)用于自定义返回 Map 类型,比如我们希望返回的 Map 是根据 Key 排序的,可以使用如下写法:

List userList = Lists.newArrayList(
        new User().setId("B").setName("张三"),
        new User().setId("A").setName("李四"),
        new User().setId("C").setName("王五")
);
userList.stream().collect(
    Collectors.toMap(User::getId, User::getName, (n1, n2) -> n1, TreeMap::new)
);

// 输出结果:
A-> 李四 
B-> 张三 
C-> 王五 
7.No mapping for GET /swagger-ui.html

SpringBoot使用Swagger2本来可以使用的,后来出现的异常No mapping for GET /swagger-ui.html,这个异常其实不用怎么解释,说白了就是找不到了。

遇到这种情况请先查找,最近你所添加继承了【WebMvcConfigurationSupport】的类
如果继承了WebMvcConfigurationSupport,则在配置文件在中配置的相关内容会失效,需要重新指定静态资源
需要重新指定swagger静态资源

@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {

    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations(
                "classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations(
                "classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

8.Java8流sorted排序-多字段升序降序Null值排序
// 1.一降一升,注意两种写法
// 先以name升序,升序结果进行name降序,再进行age升序(有效)
list.stream().sorted(Comparator.comparing(User::name).reversed().thenComparing(User::age));
// 先以name降序,再进行age升序(有效)
list.stream().sorted(Comparator.comparing(User::name,Comparator.reverseOrder()).thenComparing(User::age)); 
 
// 2.双降,注意两种写法
// 先以name升序,升序结果进行name降序,再进行age升序,结果就是name和age都降序(测试无效,不知道写法是不是错了,求指点)
list.stream().sorted(Comparator.comparing(User::name).reversed().thenComparing(User::age).reversed);
// 先以name降序,再进行age降序(有效)
list.stream().sorted(Comparator.comparing(User::name,Comparator.reverseOrder()).thenComparing(User::age,Comparator.reverseOrder())); 
 
 
// 3.包含Null数据的集合排序
// nullsFirst,age为空值的排在在前边,nullsLast相反
sorted(Comparator.comparing(User::age, Comparator.nullsFirst(Integer::compareTo))) 
9.java 8 stream list 对象 转map
List list = new ArrayList<>();
1.对象中的属性转map 通过Collectors.toMaplist.stream().collect(Collectors.toMap(Person::getId,Person::getName));
2.收集对象本身list.stream().collect(Collectors.toMap(Person::getId,list->list));list->list 是一个返回本身的lambda表达式,还可以用function接口中的一个默认方法Function.identity(),返回对象本身
list.stream().collect(Collectors.toMap(Person::getId,Function.identity()));
3.key重复的情况,key有可能重复,会跑出异常:java.lang.illegalStateException:Duplicate key.这时候就要在toMap方法指定当前key冲突时key的选择,这里时第二个key覆盖第一个keylist.stream().collect(Collectors.toMap(Person::getName,Function.identity(),(key1,key2)->key2));
4.根据一个字段或者属性分组也可以直接用groupingby方法list.list(100).collect(Collectors.groupingBy(Person::getAge));通过partitioningBy 进行分组list.limit(100).collect(Collectors.partitioningBy(p-P.getAge()<18));
docker 1、启动mysql
docker run --restart=always --name mysql -v /home/kewen/Applications/mysql/data:/var/lib/mysql
  -v /home/kewen/Applications/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf
  -p 3306:3306
  -e "MYSQL_ROOT_PASSWORD=123456" -e "MYSQL_ROOT_HOST=%"
  -d mysql:5.7.23
2、启动redis
docker run -itd --restart=always --name redis
 -v /home/kewen/Applications/redis/redis.conf:/etc/redis/redis.conf
 -v /home/kewen/Applications/redis/data:/data
 -p 6379:6379 redis redis-server /etc/redis/redis.conf

异常情况:

​ docker 里 启动redis之后就立马挂掉?

​ 检查配置文件是否设置了daemonize yes,如果是,就要改为daemonize no,因为该选项让redis成为在后台运行的守护进程,而docker容器必须要有一个前台进程才能留存。

3、启动kafka
1. 启动Zookeeper
    docker run --restart=always -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper

2. 启动Kafka
    docker run  -d --name kafka 
    -p 9092:9092 
    -e KAFKA_BROKER_ID=0 
    -e KAFKA_ZOOKEEPER_CONNECT=10.0.4.11:2181 
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.20.2.42:9092 
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

3. 搭建Kafka集群
    docker run -d --name kafka1 
    -p 9093:9093 
    -e KAFKA_BROKER_ID=1 
    -e KAFKA_ZOOKEEPER_CONNECT=<宿主机IP>:2181 
    -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<宿主机IP>:9093 
    -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -t wurstmeister/kafka
技术文档 1、MyBatis-Plus 常用注解

java 实体类 临时注解_MyBatis-Plus 常用注解_weixin_39933026的博客-CSDN博客

2、Spring Junit

SpringBoot test_好习惯要坚持下去-CSDN博客_springboottest

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号