ASList

Java Stream

落花浮王杯 提交于 2020-08-05 21:11:19
1 Stream简介 Stream是数据渠道,用于操作数据源(集合,数组等)所生成得元素序列。而集合讲得是数据,流讲得是计算。 注意: Stream 自己不会存储元素。 Stream 不会改变源对象。相反,它会返回一个持有结果得新Stream Stream 操作时延迟执行得,这意味着它们会等到需要结果时才执行。(延迟加载) Stream 操作步骤 Stream 创建: 一个数据源(集合,数组),获取一个流。 Stream 中间操作: 一个中间操作链,对数据源的数据进行处理。 Stream 终止操作: 一个终止操作,执行中间操作链,并产生结果。 2 Stream 用法 2.1 创建Stream //1. 通过 Collection.stream() / parallelStream() 创建Stream List<String> list = new ArrayList<String>(); Stream<String> stream11 = list.stream(); // 串行流 Stream<String> stream12 = list.parallelStream(); // 并行流 //2. 通过 Arrays.stream() 获取数组流 IntStream stream2 = Arrays.stream(new int[]{1,2}); // 串行流 //3. 通过

leetcode 17 电话号码的字母组合

不想你离开。 提交于 2020-08-05 17:50:53
原题点 这里 知识点:List的复制:目的List的大小必须与源List的大小一致 List tmp = Arrays.asList( new Object[ans.size()]); Collections.copy(tmp,ans); JDK8 以后,只有在放入数据后,List中存储数据的数组才会初始化,所以必须要放东西进去。 这样我们在取tmp内的元素时,做一下强制类型转换就行。 补充要给高级语法,装逼利器: List<String> a = letterCombinations("23" ); a.forEach(System.out::println); 说回这道题,官方题解用回溯法。其实不用这么麻烦。直接遍历一下就行。 public static List<String> letterCombinations(String digits) { List <StringBuffer> ans = new ArrayList<> (); String[] phone = {"", "","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" }; for ( int i=0;i<digits.length();i++ ){ int idx = digits.charAt(i)-'0' ; List tmp = Arrays

字节跳动笔试算法面试题:JAVA语言的三种实现方式,哪一种最优?

倾然丶 夕夏残阳落幕 提交于 2020-08-05 03:52:36
首先,我们先来看一下字节跳动官网的招聘信息。 https://job.bytedance.com/society/ 在招聘首页上写着这么一句话。“和优秀的人,做有挑战的事”。 其次,我们可以看一下它招聘的研发职位要求,我这边找了两个,一个后台研发,一个广告算法两个职位。在职位描述中,可以看到数据结构和数据算法是必备项。 最后,就算不为了进入字节跳动,如果你抽一定的时间来学习算法,也可以加强自己的思维逻辑能力,对自己的技能提升也有非常大的帮助,会一门技术就多一条出路。 字节跳动初面笔试算法题目-字符串反转 方法一:JAVA语言特性 看到这样的题目,首先我们应该想到使用最基础的方法来解决这个问题。 利用JAVA语言提供的特性,比如先通过String的split()方法拆分,然后集合工具类Collections.reverse()方法,最后再返回字符串。 那如何实现呢? 请看代码; public static void main(String[] args) { String str="the sky is blue"; //使用\\s+正则来以空格拆分字符串 String[] strs = str.split("\\s+"); //使用工具类Arrays.asList()将其转换为List集合 List<String> strLists = Arrays.asList(strs); /

spring cloud feign 的调用过程

一世执手 提交于 2020-08-04 22:13:40
member 服务远程调用coupon服务 1. 这两个服务要同时注册到nacos中。 2.引入open-feign。 3.创建feign包编写接口CouponFeignService package com.atguigu.gulimall.member.feign; import com.atguigu.common.utils.R; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; @FeignClient("gulimall-coupon") public interface CouponFeignService { @RequestMapping("coupon/coupon/member/list") public R membercoupons(); } 注意:@RequestMapping("coupon/coupon/member/list")中的地址 是在coupon服务中的congtroller的方法 @RestController @RequestMapping("coupon/coupon") public class CouponController { ...

在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了

馋奶兔 提交于 2020-07-29 07:36:08
前言 在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了。 判断相等 字符串判断相等 String str1 = null; String str2 = "java金融"; // str1.equals(str2); 错误的写法 str2.equals(str1); // 常量写前面 Objects.equals(str1, str2);// 借助jdkUtil工具类 StringUtils.equals(str1,str2); // 自定义工具类 字符串判断相等我们记住一定要常量写前面。 借助jdk提供的util帮助类(Objects)。 自定义工具类,进行判空处理。 包装类判断相等 Integer n1 = 100; Integer n2 = 100; System.out.println(n1 == n2);//true System.out.println(n1.equals(n2));//true Integer n3 = 200; Integer n4 = 200; System.out.println(n3 == n4);//false System.out.println(n3.equals(n4));//true 为什么n3== n4 是false呢?由于包装类的缓存机制。 包装类的比较用equals去判断。 最推荐的还是用工具类去判断

java8函数式编程

£可爱£侵袭症+ 提交于 2020-07-29 05:13:29
一 、什么是函数式编程 1、每个人对 函数式编程 的理解不尽相同。 但其核心是:在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。 Lambda 表达式是一个匿名方法,将行为像数据一样进行传递。 2、编写不同形式的Lambda表达式: Runnable noArguments = () -> System.out.println("Hello World"); 所示的 Lambda 表达式不包含参数,使用空括号 () 表示没有参数。该 Lambda 表达式 实现了 Runnable 接口,该接口也只有一个 run 方法,没有参数,且返回类型为 void。 ActionListener oneArgument = event -> System.out.println("button clicked"); 所示的 Lambda 表达式包含且只包含一个参数,可省略参数的括号,这和例 2-2 中的 形式一样 Runnable multiStatement = () -> { System.out.print("Hello"); System.out.println(" World"); }; Lambda 表达式的主体不仅可以是一个表达式,而且也可以是一段代码块,使用大括号 ({})将代码块括起来,如上图所示。该代码块和普通方法遵循的规则别无二致,可以用返

java8 特性之函数式接口

女生的网名这么多〃 提交于 2020-07-29 02:57:13
java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖。注解都是@FunctionalInterface Consumer 消费 [kənˈsjuːmə(r)] List<Person> lisiList = new ArrayList<>(); Consumer <Person> consumer = x -> { if (x.name.equals("lisi")){ lisiList.add(x); } }; Stream.of( new Person(21,"zhangsan"), new Person(22,"lisi"), new Person(23,"wangwu"), new Person(24,"wangwu"), new Person(23,"lisi"), new Person(26,"lisi"), new Person(26,"zhangsan") ).forEach(consumer); System.out.println(JSON.toJSONString(lisiList)); // 结果[{"age":22,"name":"lisi"},{"age":23,"name"

Java开发最常犯的10个错误,打死都不要犯!

谁说胖子不能爱 提交于 2020-07-28 07:52:12
阅读目录 Array转ArrayList 判断一个数组是否包含某个值 在循环内部删除List中的一个元素 HashTable与HashMap 使用集合原始类型(raw type) 访问级别 ArrayList和LinkedList 可变与不可变 父类和子类的构造方法 “”还是构造方法 未来工作 这个列表总结了10个Java开发人员最常犯的错误。 1、Array转ArrayList 当需要把Array转成ArrayList的时候,开发人员经常这样做: List<String> list = Arrays.asList(arr); 复制代码 Arrays.asList()会返回一个ArrayList,但是要特别注意,这个ArrayList是Arrays类的静态内部类,并不是java.util.ArrayList类。 java.util.Arrays.ArrayList类实现了set(), get(),contains()方法,但是并没有实现增加元素的方法(事实上是可以调用add方法,但是没有具体实现,仅仅抛出UnsupportedOperationException异常),因此它的大小也是固定不变的。为了创建一个真正的java.util.ArrayList,你应该这样做: ArrayList<String> arrayList = new ArrayList<String>

单元测试利器Mockito框架

你离开我真会死。 提交于 2020-07-27 08:28:07
什么是Mock Mock 的中文译为仿制的,模拟的,虚假的。对于测试框架来说,即构造出一个模拟/虚假的对象,使我们的测试能顺利进行下去。 Mock 测试就是在测试过程中,对于某些 不容易构造(如 HttpServletRequest 必须在 Servlet 容器中才能构造出来)或者不容易获取 比较复杂 的对象(如 JDBC 中的 ResultSet 对象),用一个 虚拟 的对象( Mock 对象)来创建,以便测试方法。 为什么使用Mock测试 单元测试 是为了验证我们的代码运行正确性,我们注重的是代码的流程以及结果的正确与否。 对比真实运行代码,可能其中有一些 外部依赖 的构建步骤相对麻烦,如果我们还是按照真实代码的构建规则构造出外部依赖,会大大增加单元测试的工作,代码也会参杂太多非测试部分的内容,测试用例显得复杂难懂。 采用 Mock 框架,我们可以 虚拟 出一个 外部依赖,只注重代码的 流程与结果,真正地实现测试目的。 Mock测试框架的好处 可以很简单的虚拟出一个复杂对象(比如虚拟出一个接口的实现类); 可以配置 mock 对象的行为; 可以使测试用例只注重测试流程与结果; 减少外部类、系统和依赖给单元测试带来的耦合。 Mockito的流程 如图所示,使用 Mockito 的大致流程如下: 创建 外部依赖 的 Mock 对象, 然后将此 Mock 对象注入到 测试类 中;

看完吊打面试官:Stream API有哪些中间操作?

試著忘記壹切 提交于 2020-07-27 05:26:17
Stream的中间操作 多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,称为“惰性求值” 。 Stream的中间操作是不会有任何结果数据输出的。 Stream的中间操作在整体上可以分为:筛选与切片、映射、排序。接下来,我们就分别对这些中间操作进行简要的说明。 筛选与切片 这里,我将与筛选和切片有关的操作整理成如下表格。 接下来,我们列举几个简单的示例,以便加深理解。 为了更好的测试程序,我先构造了一个对象数组,如下所示: protected List<Employee> list = Arrays.asList( new Employee("张三", 18, 9999.99), new Employee("李四", 38, 5555.55), new Employee("王五", 60, 6666.66), new Employee("赵六", 8, 7777.77), new Employee("田七", 58, 3333.33) ); 其中,Employee类的定义如下所示。 @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor public class Employee implements Serializable {