首页
关于
友链
Search
1
wlop 4K 壁纸 4k8k 动态 壁纸
1,468 阅读
2
Nacos持久化MySQL问题-解决方案
931 阅读
3
Docker搭建Typecho博客
750 阅读
4
滑动时间窗口算法
728 阅读
5
Nginx反向代理微服务配置
699 阅读
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
登录
Search
标签搜索
java
javase
docker
java8
springboot
thread
spring
分布式
mysql
锁
linux
redis
源码
typecho
centos
git
map
RabbitMQ
lambda
stream
少年
累计撰写
189
篇文章
累计收到
24
条评论
首页
栏目
生活
解决方案
JAVA基础
JVM
多线程
开源框架
数据库
前端
分布式
框架整合
中间件
容器部署
设计模式
数据结构与算法
安全
开发工具
百度网盘
天翼网盘
阿里网盘
页面
关于
友链
搜索到
4
篇与
的结果
2022-09-07
JAVA8-Stream创建
创建Stream创建Stream方式:创建Stream的方式1、通过Collection2、通过values3、通过Arrays4、通过file5、通过iterate创建,无限的创建6、通过Generate创建7、自定义Supplier,创建Stream使用范例1、Collection创建,输出值顺序与之前放入值顺序一致。范例: /** * 通过Collection创建Stream,数据顺序和放入顺序一致 * @return */ public static Stream<String> createStreamByCollection(){ List<String> list = Arrays.asList(new String("Hello"), new String("world"), new String("please")); return list.stream(); }2、values创建,输出值顺序与之前放入值顺序一致。范例: /** * 通过values创建Stream,顺序一直 * @return */ public static Stream<String> createStreamByValues(){ return Stream.of("Hello","world","please"); }3、Arrays创建,输出值顺序与之前放入值顺序一致。范例: /** * 3、通过Arrays创建,顺序一致 * @return */ public static Stream<String> createStreamByArrays(){ return Arrays.stream(new String[]{"Hello","world","please"}); }4、File创建范例: /** * 4、通过file创建 * @return */ public static Stream<String> createStreamByFile(){ Path path = Paths.get("D:\\software\\workspace\\IdeaProjects\\study\\study-java8\\src\\main\\java\\com\\example\\study\\java8\\streams\\CreateStream.java"); try { Stream<String> stream = Files.lines(path); return stream; } catch (IOException e) { throw new RuntimeException(e.getMessage()); } }5、iterate无限的创建范例: /** * 5、通过iterate创建,无限的创建 * @return */ public static Stream<Integer> createStreamByIterate(){ return Stream.iterate(0, n->n+2).limit(10); } 6、Generate创建范例: /** * 6、通过Generate创建 * @return */ public static Stream<Double> crateStreamByGenerate(){ return Stream.generate(Math::random).limit(10); }7、自定义Supplier,创建Stream范例: /** * 自定义Supplier,创建Stream * @return */ public static Stream<Obj> createStreamByDefine(){ return Stream.generate(new ObjSupplier()).limit(10); } static class ObjSupplier implements Supplier<Obj> { int index =0; Random random = new Random(System.currentTimeMillis()); @Override public Obj get() { index = random.nextInt(100); return new Obj(index, "Name->"+index); } } @Data @AllArgsConstructor @NoArgsConstructor @ToString static class Obj{ private Integer id; private String name; }熟悉创建Stream后,就是使用其api进行开发了。
2022年09月07日
108 阅读
0 评论
2 点赞
2022-09-06
JAVA8方法推导
Lambda方法推导详细解析什么情况下可以进行方法推导?类的方法(静态方法)对象的方法构造方法自定义函数式接口范例:package com.example.study.java8.InterfaceFunction; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; /** * 方法推导 * 什么情况下可以进行方法推导: * 1、类的方法(静态方法) * 2、对象的方法 * 3、构造方法 */ public class MethodReferenceUsageDemoOne { public static void main(String[] args) { //方法推导,范例一:类的方法 //原始写法 Consumer<String> consumer = s-> System.out.println(s); genericityConsumer(consumer, "hello"); //1、进化一 genericityConsumer(s->System.out.println(s), "world"); //2、进化二 genericityConsumer(System.out::println, "nice"); System.out.println("==========================="); //方法推导,范例二:类的方法 List<Apple> list = Arrays.asList(new Apple("red", 10) , new Apple("red", 60) , new Apple("blue", 40) , new Apple("black", 30) , new Apple("green", 80) , new Apple("blue", 90) , new Apple("green", 60) , new Apple("green", 50) , new Apple("red", 20)); System.out.println(list); list.sort((oneParameter,twoParameter)->oneParameter.getColor().compareTo(twoParameter.getColor())); System.out.println(list); System.out.println("============排序另一种写法==============="); //排序另一种写法 List<Apple> list2= Arrays.asList(new Apple("red", 10) , new Apple("red", 60) , new Apple("blue", 40) , new Apple("black", 30) , new Apple("green", 80) , new Apple("blue", 90) , new Apple("green", 60) , new Apple("green", 50) , new Apple("red", 20)); System.out.println(list2); list2.sort(Comparator.comparing(Apple::getColor)); //排序说明: //1、匿名内部类 //2、上面第一种写法 //3、上面第二种写法 //代码越来越简单 System.out.println("==========================="); //方法推导,范例三:类的方法 //原始写法 list.stream().forEach(apple->System.out.println(apple)); System.out.println("==========================="); //进化1 list.stream().forEach(System.out::println); System.out.println("==========================="); //方法推导,范例四:类的方法 //原始写法 Integer integer = Integer.parseInt("123"); System.out.println(integer); System.out.println("==========================="); //进化 Function<String, Integer> function = Integer::parseInt; Integer integerTwo = function.apply("321"); System.out.println(integerTwo); System.out.println("==========================="); //方法推导,范例五:对象的方法 BiFunction<String, Integer, Character> stringIntegerCharacterBiFunction = String::charAt; Character character = stringIntegerCharacterBiFunction.apply("Hello", 1); System.out.println(character); System.out.println("==========================="); //方法推导,范例六:构造方法,1个参数 Supplier<String> supplier = String::new; String str = supplier.get(); System.out.println(str.getClass()); System.out.println("==========================="); //方法推导,范例七:构造方法,2个参数 //说明:Apple::new; 就是掉构造方法,自动推导参数和类型 BiFunction<String,Integer,Apple> appleBiFunction = Apple::new; Apple apple = appleBiFunction.apply("red", 50); System.out.println(apple); System.out.println("==========================="); //方法推导,范例八:构造方法-自定义FunctionalInterface接口,多个参数 CustomThreeFunctionalInterface<String,Integer,String,ComplexApple> appleSupplier = ComplexApple::new; ComplexApple complexApple = appleSupplier.apply("苹果",20,"green"); System.out.println(complexApple); } /** * 泛型Consumer * @param consumer * @param t * @param <T> */ public static <T> void genericityConsumer(Consumer<T> consumer, T t){ consumer.accept(t); } } 自定义函数式接口package com.example.study.java8.InterfaceFunction; /** * 自定义多个参数函数接口,创建对象 */ @FunctionalInterface public interface CustomThreeFunctionalInterface<T, U, K, R> { R apply(T t, U u, K k); } ComplexApplepackage com.example.study.java8.InterfaceFunction; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString; /** * 多个参数,构造方法推导 */ @Data @AllArgsConstructor @NoArgsConstructor @ToString public class ComplexApple { private String color; private Integer weight; private String name; } 主要讲解了,Lambda方法推导的常见用法。
2022年09月06日
119 阅读
0 评论
3 点赞
2022-09-06
Java8-functionInterface
Lambda表达式用法用户范例package com.example.study.java8.InterfaceFunction; /** * lambda表达式用法 */ public class LambdaUsage { public static void main(String[] args) { Runnable runnable1 = ()-> System.out.println("hello"); Runnable runnable2 = new Runnable() { @Override public void run() { System.out.println("hello"); } }; process(runnable1); process(runnable2); process(()-> System.out.println("hello")); } public static void process(Runnable runnable){ runnable.run(); } } 学习目标一、Predicate:诊断,返回boolean类型@FunctionalInterface public interface Predicate {/** * Evaluates this predicate on the given argument. * * @param t the input argument * @return {@code true} if the input argument matches the predicate, * otherwise {@code false} */ boolean test(T t);二、Consumer:消费者,没有返回类型@FunctionalInterface public interface Consumer {/** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t);三、Function:函数有返回值@FunctionalInterface public interface Function<T, R> {/** * Applies this function to the given argument. * * @param t the function argument * @return the function result */ R apply(T t);四、Supplier:生成者:返回一个对象@FunctionalInterface public interface Supplier {/** * Gets a result. * * @return a result */ T get();详细说明1、Predicate详细用法范例: package com.example.study.java8.InterfaceFunction; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.BiPredicate; import java.util.function.IntPredicate; import java.util.function.Predicate; /** * Lambda表达式的使用:Prodicate用法 */ public class LambdaUsagePredicate { public static void main(String[] args) { List<Apple> list = Arrays.asList(new Apple("red", 10) , new Apple("red", 60) , new Apple("blue", 40) , new Apple("black", 30) , new Apple("green", 80) , new Apple("blue", 90) , new Apple("green", 60) , new Apple("green", 50) , new Apple("red", 20)); //Predicate用法 List<Apple> filterList = filter(list, apple -> apple.getColor().equals("green")); for (Apple apple : filterList) { System.out.println(apple.toString()); } System.out.println("============================"); //其它类似Predicate用法 //IntegerPredicate用法 List<Apple> filterByWeight = predicateByWeight(list, weight -> weight == 60); for (Apple apple : filterByWeight) { System.out.println(apple.toString()); } System.out.println("============================"); //BiPredicate用法 List<Apple> biPredicateResult = biPredicateByColorAndWeight(list, (color, weight) -> { return color.equals("green") && weight == 60; }); for (Apple apple : biPredicateResult) { System.out.println(apple.toString()); } } //1、Predicate:诊断的用法 public static List<Apple> filter(List<Apple> sources, Predicate<Apple> predicate) { List<Apple> result = new ArrayList<>(); for (Apple apple : sources) { if (predicate.test(apple)) { result.add(apple); } } return result; } //2、其它类似Predicate用法 //IntegerPredicate用法 public static List<Apple> predicateByWeight(List<Apple> source, IntPredicate intPredicate) { List<Apple> result = new ArrayList<>(); for (Apple apple : source) { if (intPredicate.test(apple.getWeight())) { result.add(apple); } } return result; } //3、带2个参数的BiPredicate用法 public static List<Apple> biPredicateByColorAndWeight(List<Apple> source, BiPredicate<String, Integer> biPredicate) { List<Apple> result = new ArrayList<Apple>(); for (Apple apple : source) { if (biPredicate.test(apple.getColor(), apple.getWeight())) { result.add(apple); } } return result; } } 2、Consumer详细用法范例: package com.example.study.java8.InterfaceFunction; import java.util.Arrays; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; /** * Lambda表达式:Consumer用法 */ public class LambdaUasgeConsumer { public static void main(String[] args) { List<Apple> list = Arrays.asList(new Apple("red", 10) , new Apple("red", 60) , new Apple("blue", 40) , new Apple("black", 30) , new Apple("green", 80) , new Apple("blue", 90) , new Apple("green", 60) , new Apple("green", 50) , new Apple("red", 20)); //1个参数调用 simpleUsageConsumer(list, apple -> System.out.println(apple.toString())); System.out.println("========================"); twoArgsUsageConsumer("我买了水果",list, (apple, name)->{ System.out.println(name+",颜色:"+apple.getColor()+"\t 重量:"+apple.getWeight()); }); } //1、一个参数用法 public static void simpleUsageConsumer(List<Apple> source, Consumer<Apple> consumer) { for (Apple apple : source) { consumer.accept(apple); } } //2、两个参数用法 public static void twoArgsUsageConsumer(String name, List<Apple> source, BiConsumer<Apple, String> consumer) { for (Apple apple : source) { consumer.accept(apple, name); } } } 3、Funcation详细用法范例:package com.example.study.java8.InterfaceFunction; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.IntFunction; /** * Lambda表达式:Funcation用法 */ public class LambdaUsageFuncation { public static void main(String[] args) { List<Apple> list = Arrays.asList(new Apple("red", 10) , new Apple("red", 60) , new Apple("blue", 40) , new Apple("black", 30) , new Apple("green", 80) , new Apple("blue", 90) , new Apple("green", 60) , new Apple("green", 50) , new Apple("red", 20)); //1、2个参数调用 List<String> stringsUsageFuncation = simpleUsageFuncation(list, apple -> apple.getColor() + ":颜色"); for(String color: stringsUsageFuncation){ System.out.println(color); } System.out.println("============================"); //2、其它用法IntFuncation调用 List<Integer> integerList = intUsageFuncation(list, weight-> weight*20); for(Integer i : integerList){ System.out.println(i); } System.out.println("=============================="); //3、3个参数调用 Apple newApple = threeeUsageFuncation("彩色", 178, (newColor, newInteger) -> { return new Apple(newColor, newInteger); }); System.out.println(newApple.toString()); } //1、2个参数 简单用法 public static List<String> simpleUsageFuncation(List<Apple> source, Function<Apple, String> function){ List<String > result = new ArrayList<>(); for(Apple apple:source){ result.add(function.apply(apple)); } return result; } //2、其它用法IntFuncation public static List<Integer> intUsageFuncation(List<Apple> source, IntFunction<Integer> function){ List<Integer > result = new ArrayList<>(); for(Apple apple:source){ result.add(function.apply(apple.getWeight())); } return result; } //3、3个参数用法 public static Apple threeeUsageFuncation(String newColor, Integer newWeight, BiFunction<String, Integer, Apple> biFunction){ return biFunction.apply(newColor, newWeight); } } 4、Supplier详细用户范例:package com.example.study.java8.InterfaceFunction; import java.util.function.Supplier; /** * Lamdba表达式之Supplier用法 */ public class LambdaUsageSupplier { public static void main(String[] args) { //范例1 Supplier<String> stringSuppier = String::new; System.out.println(stringSuppier.get().getClass()); System.out.println("====================="); //范例2 Apple apple = createApple(() -> { return new Apple("五颜六色", 200); }); System.out.println(apple.toString()); } public static Apple createApple(Supplier<Apple> supplier){ return supplier.get(); } } 注意:参数类型package com.example.study.java8.InterfaceFunction; /** * 参数类型注意 */ public class ArgsCase { public static void main(String[] args) { int i =0; Runnable runnable = new Runnable() { @Override public void run() { //i会报错提示: //Variable 'i' is accessed from within inner class, needs to be final or effectively final // i++; } }; i++; //Lambda表达式 Runnable runnable1 = ()->{ //i同样报错提示: //Variable used in lambda expression should be final or effectively final // System.out.println(i); }; i++; } }
2022年09月06日
170 阅读
0 评论
5 点赞
2022-03-12
初识RabbitMQ
RabbitMQ作用异步处理、应用解耦、流量控制概述大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。消息队列主要有两种形式的目的地队列(queue):点对点消息通信(point-to-point)主题(topic):发布(publish)/订阅(subscribe)消息通信点对点式:• 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获 取消息内容,消息读取后被移出队列 • 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者发布订阅式: • 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个 主题,那么就会在消息到达时同时收到消息JMS(Java Message Service)JAVA消息服务: • 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现AMQP(Advanced Message Queuing Protocol)• 高级消息队列协议,也是一个消息代理的规范,兼容JMS• RabbitMQ是AMQP的实现Spring支持 • spring-jms提供了对JMS的支持 • spring-rabbit提供了对AMQP的支持 • 需要ConnectionFactory的实现来连接消息代理• 提供JmsTemplate、RabbitTemplate来发送消息• @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息 代理发布的消息• @EnableJms、@EnableRabbit开启支持Spring Boot自动配置 • JmsAutoConfiguration• RabbitAutoConfiguration市面的MQ产品 • ActiveMQ、RabbitMQ、RocketMQ、KafkRabbitMQ概念RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现核心概念Message消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成, 这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可 能需要持久性存储)等。 Publisher 消息的生产者,也是一个向交换器发布消息的客户端应用程序。 Exchange 交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。 Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别 Queue 消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直 在队列里面,等待消费者连接到这个队列将其取走。 Binding绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交 换器理解成一个由绑定构成的路由表。 Exchange 和Queue的绑定可以是多对多的关系。 Connection网络连接,比如一个TCP连接。Channel 信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道 发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都 是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。 Consumer消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。 Virtual Host 虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加 密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥 有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时 指定,RabbitMQ 默认的 vhost 是 /。 Broker 表示消息队列服务器实体
2022年03月12日
243 阅读
0 评论
2 点赞