`

java8的常用写法

 
阅读更多

package com.sf.gis.boot;

 

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Locale;

import java.util.Map;

import java.util.Optional;

import java.util.OptionalInt;

import java.util.Set;

import java.util.function.Function;

import java.util.stream.Collectors;

import java.util.stream.IntStream;

import java.util.stream.Stream;

 

import com.google.common.collect.Lists;

 

public class Test {

 

/**

* jdk8中使用了::的用法

* 就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下,双冒号运算就是Java中的[方法引用],[方法引用]的格式是:

* 表达式

* person -> person.getAge();

* 使用双冒号:

* Person::getAge

* 表达式:

* new HashMap<>()

* 使用双冒号:

* HashMap :: new

*/

 

public static void main(String[] args) {

 

String[] arrayStr = { "珊瑚", "冷光", "冷光", "冷暖", "阳光" };

Arrays.stream(arrayStr).filter(n -> n.startsWith("冷")).forEach(System.out::println);

 

List<String> strList = new ArrayList(Arrays.asList(arrayStr)) ;

System.out.println(strList);

 

/**

* filter使用

*/

System.out.println("filter");

strList.stream().filter(n -> n.startsWith("冷")).forEach(System.out::println);

 

/**

* distinct去重

*/

System.out.println("distinct");

strList.stream().distinct().forEach(System.out::println);

 

/**

* limit 截取

*/

System.out.println("limit");

strList.stream().limit(2).forEach(System.out::println);

 

/**

* skip 跳过

*/

System.out.println("skip");

strList.stream().skip(2).forEach(System.out::println);

 

/**

* map 映射 map 方法用于映射每个元素到对应的结果。

* map() 接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素

* flatMap()接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

*/

System.out.println("map");

strList.stream().map(item -> item + "你好").forEach(System.out::println);

 

Product prod1 = new Product(1L, 1, new Double(15), "面包");

//Product prod11 = new Product(1L, 1, new Double(15), "面包2");

Product prod2 = new Product(2L, 2, new Double(20), "饼干");

Product prod3 = new Product(3L, 3, new Double(30), "月饼");

List<Product> prodList = Lists.newArrayList(prod1, prod2, prod3);

 

List<String> nameList = prodList.stream().map(item -> item.getName()).collect(Collectors.toList());

System.out.println(nameList); // [面包, 饼干, 月饼]

Long count = prodList.stream().mapToInt(item -> item.getNum()).count();

System.out.println(count); // 3

Long min = prodList.stream().mapToLong(item -> item.getId()).min().getAsLong();

System.out.println(min); // 1

prodList.stream().mapToDouble(item -> item.getPrice()).forEach(System.out::println); 

 

/**

* sorted 排序

*/

System.out.println("sorted");

strList.stream().sorted(String :: compareTo).forEach(System.out::println);

 

/**

* match 匹配

*/

System.out.println("match");

Boolean result1 = strList.stream().allMatch(s -> s.equals("冷光"));

        System.out.println(result1);

        

        Boolean result3 = strList.stream().anyMatch(s -> s.equals("冷光"));

        System.out.println(result3);

        

        Boolean reslut2 = strList.stream().noneMatch(s -> s.equals("冷光"));

        System.out.println(reslut2);

        //随机读取一个

        Optional<String> getResult = strList.stream().findAny();

        System.out.println(getResult);

        System.out.printf("获取Optional中的值:%s%n", getResult.get());

        

        /**

         * collect

         */

        // 转为list Collectors.toList()

        List<String> nameList2 = prodList.stream().map(item -> item.getName()).collect(Collectors.toList());

 

        // 转为Set Collectors.toSet()

        Set<String> nameSet = prodList.stream().map(item -> item.getName()).collect(Collectors.toSet());

 

        // 转为Map Collectors.toMap(Product::getId, Product::getId) 第一个参数是map的key 第二个参数是map的value

        Map<Long, Product> collect = prodList.stream().collect(Collectors.toMap(Product::getId, product -> product));

        System.out.println(collect);

 

        // 转为LinkedList

        prodList.stream().map(item -> item.getName()).collect(Collectors.toCollection(LinkedList::new));

 

        //统计总数

        Long count1 = prodList.stream().collect(Collectors.counting());

 

        // 分组(分组完成后key value键值对,key为分组的字段 值为集合)

        Map<Long, List<Product>> listMap = prodList.stream().collect(Collectors.groupingBy(Product::getId));

        System.out.println(listMap);

 

        // 拼接

        String nameJoin = prodList.stream().map(Product::getName).collect(Collectors.joining());

        

        /**

         * reduce 归约

         */

        //第一种方法求和

        System.out.println("reduce");

        String connectStrings = strList.stream().reduce("111", (x, y) -> x + y);

        System.out.println(connectStrings);

 

        // 第二种方法求和

        System.out.println("reduce2");

        String connectStrings1 = strList.stream().reduce("222", Test::getConnectStrings);

        System.out.println(connectStrings1);

        

        System.out.println("-----------------------------------------------------------");

        

        String[] numberStrings = {"1", "2", "3"};

        // mapToInt参数: 需要转换成相应的类型方法

        IntStream intStream = Arrays.stream(numberStrings).mapToInt(Integer::valueOf);

        //使用对应的 Optional 接收

        OptionalInt optionalNumber = intStream.max();

        // 取值,给默认值 0,为空结果为0

        System.out.printf("numberStrings's max number is: %s%n", optionalNumber.orElse(0));

        

        

        //Collectors 集合归约

        //  toList

        List<String> list2 = Arrays.stream(numberStrings).collect(Collectors.toList());

        // Get String by connected

        String connectStrings2 = Arrays.stream(numberStrings).collect(Collectors.joining(","));

        System.out.printf("Collectors toList: %s , Conlletors Join Strings: %s%n", list2, connectStrings2);

        

        /**

         * group by

         */

        System.out.println("group by");

        Map<String, List<Locale>> countryToLocaleList = Stream.of(Locale.getAvailableLocales()).collect(Collectors.groupingBy(l -> l.getDisplayCountry()));

        

        // predicate

        Map<Boolean, List<Locale>> englishAndOtherLocales = Stream.of(Locale.getAvailableLocales())

        .collect(Collectors.groupingBy(l -> l.getDisplayLanguage().equalsIgnoreCase("English")));

 

        // partitioningBy

        Map<Boolean, List<Locale>> englishAndOtherLocales2 = Stream.of(Locale.getAvailableLocales())

        .collect(Collectors.partitioningBy(l -> l.getDisplayLanguage().equalsIgnoreCase("English")));

        

        

}

 

/**

* Connect Strings

* @param s1 参数1

* @param s2 参数2

* @return java.lang.String

*/

private static String getConnectStrings(String s1, String s2) {

    return s1 + s2;

}

 

public static class Product {

 

private Long id;

private Integer num;

private Double price;

private String name;

 

public Product() {}

 

public Product(Long id, Integer num, Double price, String name) {

this.id = id;

this.num = num;

this.price = price;

this.name = name;

}

 

public Long getId() {

return id;

}

 

public void setId(Long id) {

this.id = id;

}

 

public Integer getNum() {

return num;

}

 

public void setNum(Integer num) {

this.num = num;

}

 

public Double getPrice() {

return price;

}

 

public void setPrice(Double price) {

this.price = price;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}

}

 

分享到:
评论

相关推荐

    Net与Java常用代码写法对比.pdf

    【标题】:“Net与Java常用代码写法对比” 在编程领域,Net 和 Java 是两种广泛使用的编程语言,它们各自有着独特的语法和特性。本篇主要对比了这两种语言在字符串操作、类型转换、枚举处理以及一些其他常见代码...

    java for循环的几种写法

    "java for 循环的几种写法" 在 Java 编程语言中,for 循环是一种非常常用的循环语句,用于遍历数组、Collection 等类型的对象。在 J2SE 1.5 中,Java 引入了一种新的 for 循环语法,称为“增强的 for 循环”或...

    Net与Java常用代码写法对比.docx

    在.NET和Java编程中,有一些常见的代码写法差异,这些差异主要体现在语法、类型转换、枚举处理、字符串操作以及泛型集合的使用上。以下是对这两种语言在这些方面的对比和详细解释: 1. **字符串操作** - .NET中的`...

    java8新特性

    最常用的函数式接口包括`java.util.function`包下的`Consumer`、`Supplier`、`Function`、`Predicate`等。 使用`@FunctionalInterface`注解可以显式地声明一个接口为函数式接口,并指示编译器进行检查。这不仅可以...

    java连接各种数据库写法

    Oracle 数据库支持多种连接方式,其中最常用的是基于 JDBC 的 thin 驱动。以下是连接 Oracle 数据库的基本步骤: ```java // 加载 Oracle JDBC 驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 设置...

    java路径两种写法.docx 新手资源,小白学习使用,java学习使用

    本文将深入探讨Java中两种常用的路径写法:“/”(正斜杠)与“\”(反斜杠),并结合实例来阐述它们的特点及应用场景。 #### 二、路径写法概述 Java支持两种路径分隔符:“/”与“\”,它们分别代表了不同操作...

    Java8应用封装,手写ORM,LOG,framework

    在Java开发领域,Java8是一个重要的里程碑,引入了许多新的特性和功能,极大地提高了开发效率和代码的可读性。在这个“Java8应用封装,手写ORM,LOG,framework”的项目中,开发者显然专注于利用Java8的新特性来构建...

    Java中List for循环的6种写法总结(推荐)

    在Java中,List是一种非常常用的数据结构,使用for循环来遍历List是开发中最基本的操作之一。下面我们就来总结一下Java中List for循环的6种写法。 方法一:最普通的不加思考的写法 这种方法是最基本的for循环写法...

    详解java中的6种单例写法及优缺点

    在 Java 中,单例是一种常用的设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式可以应用于各种场景,如数据库连接池、日志记录器、线程池等。但是,单例模式也存在一些缺点,如...

    java8源码-example:常见的java知识点代码示例

    java8 源码 1 Java8 tutorial 示例代码:com.java8 入门教程链接: 2 Machine learning 3 日志级别 日志记录器(Logger)的行为是分等级的。如下表所示: 分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义...

    常用数据库jdbc连接写法大全

    - 通过ODBC桥接,使用`sun.jdbc.odbc.JdbcOdbcDriver`(Java 8及之前版本)或`java.sql.DriverManager`(Java 9及以上版本)。 - 连接:`Connection cn = DriverManager.getConnection("jdbc:odbc:" + sdsn, susr,...

    Java for循环几种写法整理

    Java for循环是编程中最常用的控制流结构之一,用于重复执行一段代码直到满足特定条件为止。在Java中,for循环有多种不同的写法,主要用于遍历数组、集合等数据结构。以下是对Java for循环几种写法的详细说明: 1. ...

    jajva IO常用写法.word

    下面将详细讲解Java IO中的一些常用写法,以及如何指定编码读取和写入文件。 1. **指定编码读取文件** 在Java中,读取文件时,如果需要处理非ASCII字符,如中文,就需要指定正确的字符编码。例如,使用`...

    java开发中常用数据库JDBC连接写法.docx

    以下是针对几种常用数据库的JDBC连接示例: 1. **MySQL** 首先需要引入MySQL的JDBC驱动,例如`mysql-connector-java-2.0.2-bin.jar`。接着,加载驱动并建立连接: ```java Class.forName("org.gjt.mm.mysql....

    java-spark中各种常用算子的写法示例

    下面我们将通过示例代码来介绍一些常用的 Spark 算子写法。 1. map 算子 map 算子是 Spark 中最基本的算子之一,它可以将一个 RDD 转换成另一个 RDD。map 算子需要定义一个转换函数,该函数将输入数据转换成输出...

    java-单例模式几种写法

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。...同时,需要注意的是,单例模式虽然常用,但在某些情况下可能不适合,如当需要多个实例或者类需要被继承时。

    Java常用的反射方法

    代码中包含的方法有如下 : 1. 创建一个Person实体类 2. 反射获取Class类对象的三种方法 ... 4.3无参构造简便写法 5.反射获取成员方法 5.1无参方法 5.2 有参方法 5.3 获取所有方法(包含Object的方法)

    java单例模式开发的7种写法

    ### Java单例模式开发的七种写法 #### 概述 单例模式是一种常用的软件设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点。在Java编程语言中,实现单例模式的方法有很多种,不同的实现方式具有不同的...

    中国3500个常用汉字草书写法示例查询1.01

    《中国3500个常用汉字草书写法示例查询1.01》:草书的艺术与实用工具 汉字,作为中华文明的重要载体,承载了博大精深的文化内涵。草书作为中国书法艺术的瑰宝之一,以其独特的流畅性和笔画的自由简化,展现了一种...

Global site tag (gtag.js) - Google Analytics