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常用代码写法对比” 在编程领域,Net 和 Java 是两种广泛使用的编程语言,它们各自有着独特的语法和特性。本篇主要对比了这两种语言在字符串操作、类型转换、枚举处理以及一些其他常见代码...
"java for 循环的几种写法" 在 Java 编程语言中,for 循环是一种非常常用的循环语句,用于遍历数组、Collection 等类型的对象。在 J2SE 1.5 中,Java 引入了一种新的 for 循环语法,称为“增强的 for 循环”或...
在.NET和Java编程中,有一些常见的代码写法差异,这些差异主要体现在语法、类型转换、枚举处理、字符串操作以及泛型集合的使用上。以下是对这两种语言在这些方面的对比和详细解释: 1. **字符串操作** - .NET中的`...
最常用的函数式接口包括`java.util.function`包下的`Consumer`、`Supplier`、`Function`、`Predicate`等。 使用`@FunctionalInterface`注解可以显式地声明一个接口为函数式接口,并指示编译器进行检查。这不仅可以...
Oracle 数据库支持多种连接方式,其中最常用的是基于 JDBC 的 thin 驱动。以下是连接 Oracle 数据库的基本步骤: ```java // 加载 Oracle JDBC 驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 设置...
本文将深入探讨Java中两种常用的路径写法:“/”(正斜杠)与“\”(反斜杠),并结合实例来阐述它们的特点及应用场景。 #### 二、路径写法概述 Java支持两种路径分隔符:“/”与“\”,它们分别代表了不同操作...
在Java开发领域,Java8是一个重要的里程碑,引入了许多新的特性和功能,极大地提高了开发效率和代码的可读性。在这个“Java8应用封装,手写ORM,LOG,framework”的项目中,开发者显然专注于利用Java8的新特性来构建...
在Java中,List是一种非常常用的数据结构,使用for循环来遍历List是开发中最基本的操作之一。下面我们就来总结一下Java中List for循环的6种写法。 方法一:最普通的不加思考的写法 这种方法是最基本的for循环写法...
在 Java 中,单例是一种常用的设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式可以应用于各种场景,如数据库连接池、日志记录器、线程池等。但是,单例模式也存在一些缺点,如...
java8 源码 1 Java8 tutorial 示例代码:com.java8 入门教程链接: 2 Machine learning 3 日志级别 日志记录器(Logger)的行为是分等级的。如下表所示: 分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义...
- 通过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循环几种写法的详细说明: 1. ...
下面将详细讲解Java IO中的一些常用写法,以及如何指定编码读取和写入文件。 1. **指定编码读取文件** 在Java中,读取文件时,如果需要处理非ASCII字符,如中文,就需要指定正确的字符编码。例如,使用`...
以下是针对几种常用数据库的JDBC连接示例: 1. **MySQL** 首先需要引入MySQL的JDBC驱动,例如`mysql-connector-java-2.0.2-bin.jar`。接着,加载驱动并建立连接: ```java Class.forName("org.gjt.mm.mysql....
下面我们将通过示例代码来介绍一些常用的 Spark 算子写法。 1. map 算子 map 算子是 Spark 中最基本的算子之一,它可以将一个 RDD 转换成另一个 RDD。map 算子需要定义一个转换函数,该函数将输入数据转换成输出...
单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类只有一个实例,并提供全局访问点。...同时,需要注意的是,单例模式虽然常用,但在某些情况下可能不适合,如当需要多个实例或者类需要被继承时。
代码中包含的方法有如下 : 1. 创建一个Person实体类 2. 反射获取Class类对象的三种方法 ... 4.3无参构造简便写法 5.反射获取成员方法 5.1无参方法 5.2 有参方法 5.3 获取所有方法(包含Object的方法)
### Java单例模式开发的七种写法 #### 概述 单例模式是一种常用的软件设计模式,其目的是确保一个类仅有一个实例,并提供一个全局访问点。在Java编程语言中,实现单例模式的方法有很多种,不同的实现方式具有不同的...
Access是一种常用的关系型数据库管理系统,主要应用于桌面应用程序中。 **代码示例:** ```java Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:Driver={Microsoft Access Driver (*....