Java 8 Stream 常用API整理

这篇博客详细介绍了Java中JSONArray转换为List、Map的方法,以及如何将List转换为Set,实现List到Map的合并操作。此外,还涵盖了Stream API的filter、sorted、groupingBy等关键用法,以及如何利用它们进行数据筛选、排序和聚合。同时,展示了如何通过Stream计算最大值、最小值、平均值,并获取满足特定条件的值。最后,展示了将List转换为SQL IN语句格式以及Stream计算多个字段的求和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1、JSONArray 转list 

JSONArray jsonArray = new JSONArray();
List<Order> orderList = jsonArray.stream().map(item -> {
    JSONObject js= (JSONObject)item;
    return jsonToEntity(trade);
}).collect(Collectors.toList());

2、JSONArray 转 map

JSONArray jsonArray = new JSONArray();
Map<Long,JSONObject> orderJs = jsonArray.stream().collect(Collectors.toMap(item->{
    JSONObject js = (JSONObject)item;
    return js.getLong("id");
},item-> (JSONObject)item));

3、list转set

Set<Long> idSet = orderList.stream().map(item->  item.getId()).collect(
    Collectors.toSet());

4、list转map,合并相同key

List<OrderLine> orderLineList= new ArrayList();
Map<String, List<OrderLine>> lineMap = orderLineList.stream().collect(Collectors .toMap(OrderLine::getOrderId, item-> new ArrayList<>(ImmutableList.of(item)), (List<OrderLine> oldList, List<OrderLine> newList) -> { oldList.addAll(newList); return oldList; }));
或者是:
Map<String, List<OrderLine>> lineMap1 = orderLineList.stream().collect(Collectors.toMap(OrderLine::getOrderId,Collections::singletonList,(existValue, newValues)-> {existValue.addAll(newValues);return existValue; }));
或者是groupingBy:
Map<String, List<OrderLine>> lineMap2 = orderLineList.stream().collect(Collectors.groupingBy(OrderLine::getOrderId));

5、关键字filter用法

List<Order> oldOrderList =  new ArrayList();
Set <Long>orderIdSet = new ArrayList();
List<Order> orderList = oldOrderList .stream().filter(item->!orderIdSet .contains(item.getid())).collect(Collectors.toList());

6、关键字sorted排序用法

List<Order> olderList =  new ArrayList();
List<Order> newList= olderList.stream()
    .sorted(Comparator.comparing(Order::getId).thenComparing(Order::getSort))
    .collect(Collectors.toList()); 

7、关键字groupingBy用法

List<OrderDetail> orderDetailList=  new ArrayList();
Map<String, Long> map = orderDetailList.stream().collect(Collectors.groupingBy(OrderDetail::getOrderId, Collectors.counting()));

8、stream拆成sql字符串IN用法

List<String> list = new new ArrayList();
String str = list.stream().map(s -> "'" + s + "'").collect(Collectors.joining(", "));

9、stream获取最大、最小、平均值、满足条件的值

List<Integer> integerList = new ArrayList<>();
integerList.add(2);
integerList.add(4);
integerList.add(1);
integerList.add(10);
int maxValue = integerList.parallelStream().collect(Collectors.summarizingInt(Integer::intValue)).getMax();
int minValue = integerList.parallelStream().collect(Collectors.summarizingInt(Integer::intValue)).getMin();
double avgValue = integerList.parallelStream().collect(Collectors.summarizingInt(Integer::intValue)).getAverage();
int filterValue = integerList.parallelStream().filter(s -> s > 9).findFirst().orElse(-1);

10、Stream纵向求和、多字段求和

List<Integer> integerList = new ArrayList<>();
int sumValue = integerList.stream().mapToInt(Integer::intValue).sum();
Dao  sumDao = list.stream().collect(Collectors.collectingAndThen(Collectors.toList(),vo->{
        Dao dao= new Dao();
        dao.count=vo.stream().mapToInt(Dao::getCount).sum();
        dao.amount=vo.stream().map(Dao::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add;
        return amountVo;
}));

<think>好的,我现在需要帮用户查找Java编程中常用API列表及用法。首先,用户提到了参考中的引用[1]和引用[2],里面提到了ArrayList、Configuration类、FileSystem类等。这说明用户可能对集合类、文件操作相关的API感兴趣。 接下来,我应该先整理Java中最常用API类别,比如集合框架、IO/NIO、多线程、网络编程、数据库连接等。用户示例中的引用涉及集合和Hadoop文件系统,所以可能需要详细说明这些部分。 用户可能需要具体的示例代码,比如如何创建ArrayList,如何使用FileSystem操作HDFS。同时,用户的问题还要求生成相关问题,所以需要预先考虑用户可能进一步询问的方向,比如性能优化、使用场景等。 另外,注意用户提到的系统级指令,比如行内公式用$...$,独立公式用$$...$$,但当前问题可能不涉及数学公式,所以可能不需要处理这部分。但需要确保LaTeX语法正确,如果有变量的话。 用户引用的内容中,引用[1]是ArrayList的初始化示例,引用[2]是关于Hadoop文件系统的操作类,比如Configuration和FileSystem。需要将这些内容自然地融入到回答中,并在引用处添加标识。 可能还需要补充其他常用API,比如String相关的方法,日期时间APIJava 8的Time API),多线程中的ExecutorService,网络编程中的Socket,数据库的JDBC等。每个部分给出简洁的示例,如代码片段,并说明用途。 最后,生成的相关问题需要与Java API相关,可能涉及如何选择集合类、IO和NIO的区别、多线程同步方法、JDBC连接步骤等。确保问题覆盖用户可能感兴趣的后续知识点。</think>### Java常用API列表及用法指南 #### 一、集合框架(核心API) 1. **ArrayList** 基础用法:动态数组实现,支持快速随机访问 ```java ArrayList<String> list = new ArrayList<>(); //初始化[^1] list.add("Java"); //添加元素 String element = list.get(0); //获取元素 ``` 2. **HashMap** 键值对存储结构,时间复杂度$O(1)$ ```java HashMap<Integer, String> map = new HashMap<>(); map.put(1, "API"); String value = map.get(1); ``` #### 二、文件操作API 1. **HDFS文件系统操作**(需hadoop-core依赖) ```java // 读取HDFS文件示例[^2] Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create("hdfs://hadoop1:9000"), conf); FSDataInputStream in = fs.open(new Path("/input.txt")); ``` 2. **本地文件IO** ```java // 使用Java NIO读取文件 Path path = Paths.get("data.txt"); List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8); ``` #### 三、多线程API 1. **ExecutorService** 线程池管理工具 ```java ExecutorService executor = Executors.newFixedThreadPool(5); executor.submit(() -> System.out.println("多线程任务")); ``` 2. **synchronized** 同步代码块实现线程安全 ```java public synchronized void criticalSection() { // 线程安全操作 } ``` #### 四、数据库连接(JDBC) ```java // MySQL连接示例 Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "user", "pass"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM users"); ``` #### 五、新特性APIJava 8+) 1. **Stream API** 函数式数据处理 ```java List<Integer> numbers = Arrays.asList(1,2,3); int sum = numbers.stream().filter(n -> n%2==0).mapToInt(n->n).sum(); ``` 2. **DateTime API** 时间日期处理 ```java LocalDateTime now = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值