java8 使用stream实现两个list集合合并成一个list集合及List切成多个list
public class ListDateSpit {private List<String> listData = new ArrayList<>();@Beforepublic void testInitData() {for (int i = 0; i < 1000; i++) {listData.add(String.format("数据ID-%s", i +
java8 合并两个 list<map>
java8 合并两个 list<map>, 并将userId 相同的所有属性合并到一个map中
list1中对象的属性:userId、userName
list2中对象的属性:userId、gender、age
最总集合中对象的属性:userId、userName、gender、age
import java.util.*;
import java.util.stream.Collectors;
public class ListTest {
public static void main(String[] args) {
mergeList();
}
/**
* @Description: 合并两个list<map>,并将userId相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: List<Map<String,Object>>
* @throws
*/
public static List<Map<String,Object>> mergeList(){
//构建List集合1
List<Map<String,Object>> list1 = new ArrayList<>();
Map<String,Object> data=new HashMap<>();
data.put("userId","100001");
data.put("userName","唐僧");
list1.add(data);
data=new HashMap<>();
data.put("userId","100002");
data.put("userName","八戒");
list1.add(data);
data=new HashMap<>();
data.put("userId","100003");
data.put("userName","悟空");
list1.add(data);
data=new HashMap<>();
data.put("userId","100004");
data.put("userName","沙僧");
list1.add(data);
//构建List集合2
List<Map<String,Object>> list2 = new ArrayList<>();
data=new HashMap<>();
data.put("userId","100001");
data.put("gender","男");
data.put("age",20);
list2.add(data);
data=new HashMap<>();
data.put("userId","100002");
data.put("gender","雄");
data.put("age",1000);
list2.add(data);
data=new HashMap<>();
data.put("userId","100003");
data.put("gender","雄");
data.put("age",600);
list2.add(data);
data=new HashMap<>();
data.put("userId","100004");
data.put("gender","男");
data.put("age",800);
list2.add(data);
//使用stream流把list1和list2根据属性userId合并一个list集合
List<Map<String, Object>> list = list1.stream().map(m -> {
list2.stream().filter(m2-> Objects.equals(m.get("userId"),m2.get("userId"))).forEach(m2-> {
m.put("gender",m2.get("gender"));
m.put("age",m2.get("age"));
});
return m;
}).collect(Collectors.toList());
for(Map<String, Object> map:list){
System.out.println(map.toString());
}
return list;
}
}
java8 合并两个 list<T>
java8 合并两个 list<T>, 并将tickeId相同的所有属性合并到一个T中
list1中对象的属性:ticketId、ticketName
list2中对象的属性:ticketId、saleNum、batchAvailableNum
最总集合中对象的属性:ticketId、ticketName、saleNum、batchAvailableNum
import java.util.*;
import java.util.stream.Collectors;
/**
* @author qzz
*/
public class ListTest1 {
public static void main(String[] args) {
mergeList();
}
/**
* @Description: 合并两个list<Ticket>,并将ticketId相同的其它属性合并
* @Title: mergeList
* @param: @return
* @return: List<Ticket>
* @throws
*/
public static List<Ticket> mergeList(){
//构建List集合1
List<Ticket> list1 = new ArrayList<>();
Ticket data=new Ticket();
data.setTicketId("100001");
data.setTicketName("唐僧");
list1.add(data);
data=new Ticket();
data.setTicketId("100002");
data.setTicketName("八戒");
list1.add(data);
data=new Ticket();
data.setTicketId("100003");
data.setTicketName("悟空");
list1.add(data);
data=new Ticket();
data.setTicketId("100004");
data.setTicketName("沙僧");
list1.add(data);
//构建List集合2
List<Ticket> list2 = new ArrayList<>();
data=new Ticket();
data.setTicketId("100001");
data.setSaleNum("20");
data.setBatchAvailableNum("10");
list2.add(data);
data=new Ticket();
data.setTicketId("100001");
data.setSaleNum("20");
data.setBatchAvailableNum("10");
list2.add(data);
data=new Ticket();
data.setTicketId("100002");
data.setSaleNum("1000");
data.setBatchAvailableNum("600");
list2.add(data);
data=new Ticket();
data.setTicketId("100003");
data.setSaleNum("600");
data.setBatchAvailableNum("100");
list2.add(data);
data=new Ticket();
data.setTicketId("100004");
data.setSaleNum("800");
data.setBatchAvailableNum("300");
list2.add(data);
//使用stream流把list1和list2根据属性ticketId合并一个list集合
List<Ticket> list = list1.stream().map(m -> {
list2.stream().filter(m2-> Objects.equals(m.getTicketId(),m2.getTicketId())).forEach(m2-> {
m.setSaleNum(m2.getSaleNum());
m.setBatchAvailableNum(m2.getBatchAvailableNum());
});
return m;
}).collect(Collectors.toList());
for(Ticket ticket:list){
System.out.println(ticket.getTicketId()+","+ticket.getTicketName()+","+ticket.getSaleNum()+","+ticket.getBatchAvailableNum());
}
return list;
}
}
一个list 集合合并去重求和
使用stream实现list中对象属性的合并(去重并求和)
说明:
需要对一个List中的对象进行唯一值属性去重,属性求和,对象假设为Student,有id、nums、sums三个属性,其中id表示唯一值,需要nums与sums进行求和,并最后保持一份。
例如说:(“s1”, 1, 1),(“s1”,2,3),(“s2”,3,5), 求和并去重的话,就是(“s1”, 3, 4),(“s2”,3,5)
/**
* @author qzz
*/
public class Student {
private String id;
private int nums;
private int sums;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getNums() {
return nums;
}
public void setNums(int nums) {
this.nums = nums;
}
public int getSums() {
return sums;
}
public void setSums(int sums) {
this.sums = sums;
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author qzz
*/
public class StudentList {
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
Student s1 = new Student();
s1.setId("s1");
s1.setNums(1);
s1.setSums(1);
list.add(s1);
s1 = new Student();
s1.setId("s1");
s1.setNums(2);
s1.setSums(3);
list.add(s1);
s1 = new Student();
s1.setId("s2");
s1.setNums(3);
s1.setSums(5);
list.add(s1);
//合并去重求和
List<Student> result = merge(list);
result.stream().forEach(e->{
System.out.println("id:"+e.getId()+",nums:"+e.getNums()+",sums:"+e.getSums());
});
}
/**
* 将id进行合并nums, sums 相加道回合并后的集合使用Java8的流进行处理
* @return
*/
public static List<Student> merge(List<Student> list){
List<Student> result = list.stream()
.collect(Collectors.toMap(Student::getId, a->a,(o1,o2)->{
o1.setNums(o1.getNums()+o2.getNums());
o1.setSums(o1.getSums()+o2.getSums());
return o1;
})).values().stream().collect(Collectors.toList());
return result;
}
}
拆分大list
在生产中经常会遇到大批量数据操作,如果直接大批量的数据对数据直接操作,则可能造成数据库执行时间过长,造成数据库压力过大。这里采用大批量数据分割成一块块小的数据,再对数据操作的方式来解决这种问题,也是我们常见的一种方式。
public class ListDateSpit {
private List<String> listData = new ArrayList<>();
@Before
public void testInitData() {
for (int i = 0; i < 1000; i++) {
listData.add(String.format("数据ID-%s", i + 1));
}
}
@Test
public void testForeach() {
for (String str : listData) {
System.out.println("输出数据:" + str);
}
}
@Test
public void testSpitList() {
List<List<String>> lisize = spitList(listData, 201);
for (List<String> listList : lisize) {
System.out.println(String.format("listlist:%s", listList.size()));
for(String stt:listList){
System.out.println(String.format("拆解后数据:%s", stt));
}
System.err.println("==============================================");
}
}
public static List<List<String>> spitList(List<String> list, int pageSize) {
List<List<String>> lists = new ArrayList<>();
int countSize = list.size();
int subSize = (countSize % pageSize > 0) ? (countSize / pageSize) + 1 : (countSize / pageSize);
int currentSize = 0;
for (int i = 0; i < subSize; i++) {
System.out.println(String.format("subSize%s,i:%s", subSize, i));
if (subSize == (i + 1)) {
System.out.println(String.format("currentSize:%s,countSize:%s", currentSize, countSize));
List<String> newList = list.subList(currentSize, countSize);
lists.add(newList);
} else {
System.out.println(String.format("currentSize:%s,countSize:%s", currentSize, pageSize));
List<String> newList = list.subList(currentSize, currentSize + pageSize);
lists.add(newList);
}
currentSize += pageSize;
}
return lists;
}
@Test
public void testDistinctList(){
System.out.println(String.format("增加重复数据前listData size:%s",listData.size()));
listData.addAll(createData());
System.out.println(String.format("增加重复数据之后listData size:%s",listData.size()));
List<String> testData=distinctList(listData);
for (String tts:testData) {
System.out.println(String.format("去重复后Data:"+tts));
}
}
public List<String> createData(){
List<String> newList=new ArrayList<>();
for (int i = 0; i < 1000; i++) {
newList.add(String.format("数据ID-%s", i + 1));
}
return newList;
}
public static List<String> distinctList(List<String> list){
return list.stream().distinct().collect(Collectors.toList());
}
@Test
public void testItemVOdistinct(){
List<ItemVO> list=createItemData();
for (ItemVO it:list){
System.out.println(String.format("编号:%s,货品名称:%s",it.itemCode,it.itemName));
}
}
public static List<ItemVO> createItemData(){
List<ItemVO> itemList=new ArrayList<>();
for(int i=0;i<1000;i++){
itemList.add(new ItemVO(i,String.format("货品名称%s编号",i)));
}
return itemList;
}
}
更多推荐
所有评论(0)