一张数据表user包括id,name,age,gender。
用List<User>装该数据表的全部数据,在这里我们假如直接获得这部分数据:
List<User> users = getUsers();
现在需要全部的name数据,我们可以:
List<String> names = users.stream().map(User::getName()).collect(Collectors.toList());
stream:stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。对stream进行修改不会修改任何一个背后的数据源。
map:接收一个函数作为参数,该函数被应用到每个元素上,并将其映射成一个新的元素。
collect:属于terminal operation,必须加在后面,否则会报错。
Collectors.toList()用来结束Stream流。
List<需要获得集合的类型> list = 已获得的集合的对象.stream().map(已获得的集合对应的类型::需要获得集合对应的内容的Getter方法).collect(Collectors.toList());
文章目录Lsit
中
数据
复制
问题1.1copy问题1.2怎么高效的
复制
1.3 回答
Lsit
中
数据
复制
问题
这是由一道开放式面试题引发的文章,题目:加入内存足够大,
一个
集合
中
有100万条数据,怎么高效的把
集合
中
的数据
复制
到另外
一个
集合
1.1copy问题
java
中
复制
分为浅拷贝和深拷贝
如果考察浅拷贝:直接使用clone方法
System.out.println("测试开始时");...
在
Java
开发
中
,有时候我们为了源
List
集合
的数据不被修改,如果采用类似“new_
list
= old_
list
”这种形式来
复制
克隆
一个
新的
List
集合
是绝对不行的,所以我们得采用下面的三种方法来
复制
一个
新的
List
集合
。
Java
克隆
复制
Array
List
等
List
集合
的方法一:
Java
中
克隆
复制
一个
List
可以在创建
List
对象时通过将源
List
集合
以参数的形式传入即可,
代码
如下:import
java
.util.Array
List
;
import
java
.util.Arrays;
importjav
List
<UserDTO> dto
List
= new Array
List
<>();
for (User user :
list
) {
UserDTO d = new UserDTO();
BeanUtils.copyProperties(user, d);
dto
List
.add(d);
使用
java
8的st
Java
将
一个
集合
中
数据
复制
或赋值到另
一个
集合
数据
中
添加到
一个
集合
public static void main(String[] args)throws Exception {
List
<String>
list
1 = new Array
List
<String>();
list
1.add("1");
list
1.add("2");
list
1.add("3");
list
1.add("5")
现在我们的开发是绝大
部分
使用的jdk至少也是1.8版本的,这个版本 开始 增加了很多的特性,今天也只是记录其
中
的一小
部分
,只是
一个
小疑惑。
在开发过程
中
我们经常会遇到需要从
一个
List
中
取出
一个
属性的
List
集合
比如 id的
集合
所以就会用到JDK8
中
的方法,
有个疑问,当我们取值的时候 是否会碰到空指针呢 ?
答案是:不会
但是也会有另外
一个
问题
public static void main(String[] args) {
User user1 = new User();
3. 使用
Java
的Collections.sort()方法对新的
List
集合
按照日期进行排序。
4. 使用
Java
的IO库将排序后的数据写入到
一个
新的log文件
中
。
下面是
代码
示例:
```
java
import
java
.io.*;
import
java
.util.*;
public class LogMerger {
public static void main(String[] args) throws IOException {
// 读取两个log文件
List
<String> log1 = readFile("log1.txt");
List
<String> log2 = readFile("log2.txt");
// 合并两个
List
集合
List
<String> mergedLog = new Array
List
<>(log1);
mergedLog.addAll(log2);
// 对新的
List
集合
按照日期排序
Collections.sort(mergedLog, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String[] fields1 = o1.split("\\s");
String[] fields2 = o2.split("\\s");
return fields1[0].compareTo(fields2[0]);
// 写入到新的log文件
writeFile("mergedLog.txt", mergedLog);
// 读取文件
内容
到
List
集合
中
private static
List
<String> readFile(String filename) throws IOException {
List
<String> lines = new Array
List
<>();
BufferedReader reader = new BufferedReader(new FileReader(filename));
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
reader.close();
return lines;
// 将
List
集合
内容
写入到文件
中
private static void writeFile(String filename,
List
<String> lines) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
for (String line : lines) {
writer.write(line);
writer.newLine();
writer.close();
在这个示例
中
,假设log文件的每行数据格式为"日期 日志
内容
",如"2022-02-26 [INFO] something happened"。在比较日期时,我们只比较每行数据的第
一个
字段(即日期
部分
)。如果日期
部分
相同,则按照后面的
内容
排序。如果需要更严格的排序,可以根据实际需求修改比较逻辑。