Java List转化判断是否包含,List使用Steam分组、转化成map
前端传入的list字符串转化成List对象并判断是否包含某些元素
public static void main(String[] args) {
String a = "[\"a\",\"b\"]";
System.out.println(a);
// 转化Json为指定格式对象
List<String> strings = JSONObject.parseObject(a, new TypeReference<List<String>>() {
});
System.out.println(strings);
// 去除字符串数组中的特殊字符
a = a.replace("[","").replace("]","").replace("\"","");
List<String> list = Arrays.asList(a.split(","));
// 转化为ArrayList
System.out.println(list);
// 判断是否包含某个元素
System.out.println(list.contains("a"));
System.out.println(list.contains("c"));
}
使用stream对List按照元素当做key进行分组
package blog;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author niushuaikui
* @description TODO
* @date 2023/11/10
*/
public class TestExample {
public static void main(String[] args) {
// 转化list,注意直接使用asList转化的list是不可变的,使用new ArrayList<>(Arrays.asList())转化的list是可变的
List<String> strList = new ArrayList<>(Arrays.asList("11","11", "12", "13", null, null));
System.out.println(strList);
Map<String, List<String>> map = strList.stream().collect(Collectors.groupingBy(x -> StringUtils.isEmpty(x) ? "null" : x));
System.out.println(map);
List<User> userList = Arrays.asList(new User("11", 11), new User("12", 12), new User("13", 13)
,new User("11", 111), new User("", 222), new User("", 333));
System.out.println(userList);
// 注意,使用 :: lambda表达式不能存在值为null的情况,否则会报空指针异常
Map<String, List<User>> collect = userList.stream()
.collect(Collectors.groupingBy(User::getName));
System.out.println(collect);
// 使用判断是否为空的方式
List<User> userList2 = Arrays.asList(new User("11", 11), new User("12", 12), new User("13", 13)
,new User("11", 111), new User("", 222), new User("", 333));
Map<String, List<User>> collect2 = userList2.stream()
.collect(Collectors.groupingBy(user -> StringUtils.isEmpty(user.getName()) ? "null" : user.getName()));
System.out.println(collect2);
// 等同于以下
Map<String, List<User>> collect3 = userList2.stream()
.collect(Collectors.groupingBy((user) ->{
return StringUtils.isEmpty(user.getName()) ? "null" : user.getName() ;
}));
System.out.println(collect3);
}
}
@Data
@AllArgsConstructor
@ToString
class User{
private String name;
private Integer age;
}
使用steam对吧List转化成Map对象,指定key和value
package blog;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author niushuaikui
* @description TODO
* @date 2023/11/10
*/
public class TestExample {
public static void main(String[] args) {
ArrayList<User> users = new ArrayList<>();
users.add(new User("111","000"));
users.add(new User("222","222"));
users.add(new User("222","3333"));
// 转化为map,如果有重复的key,取后面的value, key为name,value为test
Map<String, String> collect = users.stream()
.collect(Collectors.toMap(User::getName, User::getTest,(before,behind)->behind));
System.out.println(collect);
// 转化成买个map,如果有重复的key,取后面的value, key为name,value为user对象
Map<String, User> collect2 = users.stream()
.collect(Collectors.toMap(User::getName, Function.identity(),(before,behind)->behind));
System.out.println(collect2);
}
}
@Data
@AllArgsConstructor
@ToString
class User {
private String name;
private String test;
}
steam过滤List,查找符合条件,
package blog;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author niushuaikui
* @description TODO
* @date 2023/11/10
*/
public class TestExample {
public static void main(String[] args) {
ArrayList<User> users = new ArrayList<>();
users.add(new User("111","000"));
users.add(new User("222","222"));
users.add(new User("222","3333"));
System.out.println(users);
// 过滤name为222的
List<User> collect = users.stream().filter(user -> StringUtils.equals(user.getName(), "222")).collect(Collectors.toList());
System.out.println(collect);
// 查找name为222的,如果没有则返回null
User user1 = users.stream().filter(user -> StringUtils.equals(user.getName(), "222")).findAny().orElse(null);
System.out.println(user1);
// 查找name为222111的,如果没有则返回null
User user2 = users.stream().filter(user -> StringUtils.equals(user.getName(), "222111")).findAny().orElse(null);
System.out.println(user2);
}
}
@Data
@AllArgsConstructor
@ToString
class User {
private String name;
private String test;
}
List 利用steam排序,指定排序,也可以直接排序
package blog;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author niushuaikui
* @description TODO
* @date 2023/11/10
*/
public class TestExample {
public static void main(String[] args) {
ArrayList<User> users = new ArrayList<>();
users.add(new User("113","113"));
users.add(new User("111","111"));
users.add(new User("111","131"));
users.add(new User("111","121"));
users.add(new User("122","122"));
users.add(new User("333","333"));
users.add(new User("121","121"));
users.add(new User("222","222"));
System.out.println("原列表"+users);
// 按照name排序,大的在后面
List<User> collect = users.stream().sorted(Comparator.comparing(User::getName))
.collect(Collectors.toList());
// 等同于 users.sort(Comparator.comparing(User::getName));
System.out.println("按照name排序,大的在后面"+collect);
// 按照name排序,大的在后面,然后按照test排序
List<User> collect1 = users.stream().sorted(Comparator.comparing(User::getName).thenComparing(User::getTest)).collect(Collectors.toList());
System.out.println("按照name排序,大的在后面,然后按照test排序"+collect1);
// 按照name排序,大的在后面,然后翻转,大的在前面
List<User> collect2 = users.stream().sorted(Comparator.comparing(User::getName).reversed())
.collect(Collectors.toList());
System.out.println("按照name排序,大的在后面,然后翻转,大的在前面"+collect2);
users.add(new User(null,"444"));
users.add(new User("444","444"));
users.add(new User(null,"555"));
// 按照想要的方式排序
List<User> collect3 = users.stream().sorted(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// 如果o1为空,o1排在前面
if (o1.getName() == null ){
return -1;
}
// 取name的最后一个字符,然后比较
return o1.getName().charAt(o1.getName().length()-1) - (o2.getName().charAt(o2.getName().length()-1));
}
})
.collect(Collectors.toList());
System.out.println("按照想要的方式排序"+collect3);
// 等价于上面的写法
List<User> collect4 = users.stream().sorted((o1, o2) -> {
// 如果o1为空,o1排在前面
if (o1.getName() == null ){
return -1;
}
// 取name的最后一个字符,然后比较
return o1.getName().charAt(o1.getName().length()-1) - (o2.getName().charAt(o2.getName().length()-1));
})
.collect(Collectors.toList());
System.out.println("按照想要的方式排序"+collect4);
List<String> list = Arrays.asList("123","122","333","100","099");
System.out.println("原列表"+list);
list.sort(Comparator.comparing(Function.identity()));
System.out.println("Function.identity()按照字符串排序"+list);
list.sort(String::compareTo);
System.out.println("String::compareTo按照字符串排序"+list);
List<Integer> intList = Arrays.asList(123,122,111,333,321);
System.out.println("原列表"+intList);
intList.sort(Integer::compareTo);
System.out.println("Integer::compareTo排序"+intList);
}
/*
原列表[User(name=113, test=113), User(name=111, test=111), User(name=111, test=131), User(name=111, test=121), User(name=122, test=122), User(name=333, test=333), User(name=121, test=121), User(name=222, test=222)]
按照name排序,大的在后面[User(name=111, test=111), User(name=111, test=131), User(name=111, test=121), User(name=113, test=113), User(name=121, test=121), User(name=122, test=122), User(name=222, test=222), User(name=333, test=333)]
按照name排序,大的在后面,然后按照test排序[User(name=111, test=111), User(name=111, test=121), User(name=111, test=131), User(name=113, test=113), User(name=121, test=121), User(name=122, test=122), User(name=222, test=222), User(name=333, test=333)]
按照name排序,大的在后面,然后翻转,大的在前面[User(name=333, test=333), User(name=222, test=222), User(name=122, test=122), User(name=121, test=121), User(name=113, test=113), User(name=111, test=111), User(name=111, test=131), User(name=111, test=121)]
按照想要的方式排序[User(name=null, test=555), User(name=null, test=444), User(name=111, test=111), User(name=111, test=131), User(name=111, test=121), User(name=121, test=121), User(name=122, test=122), User(name=222, test=222), User(name=113, test=113), User(name=333, test=333), User(name=444, test=444)]
按照想要的方式排序[User(name=null, test=555), User(name=null, test=444), User(name=111, test=111), User(name=111, test=131), User(name=111, test=121), User(name=121, test=121), User(name=122, test=122), User(name=222, test=222), User(name=113, test=113), User(name=333, test=333), User(name=444, test=444)]
原列表[123, 122, 333, 100, 099]
Function.identity()按照字符串排序[099, 100, 122, 123, 333]
String::compareTo按照字符串排序[099, 100, 122, 123, 333]
原列表[123, 122, 111, 333, 321]
Integer::compareTo排序[111, 122, 123, 321, 333]
*/
}
@Data
@AllArgsConstructor
@ToString
class User {
private String name;
private String test;
}
包含对象的List提取指定属性,去重
package blog;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author niushuaikui
* @description TODO
* @date 2023/11/10
*/
public class TestExample {
public static void main(String[] args) {
ArrayList<User> users = new ArrayList<>();
users.add(new User("113","113"));
users.add(new User("111","111"));
users.add(new User("111","131"));
users.add(new User("111","121"));
users.add(new User("122","122"));
users.add(new User("333","333"));
users.add(new User("121","121"));
users.add(new User("222","222"));
System.out.println("原列表"+users);
// 提取属性
List<String> collect = users.stream().map(User::getName).collect(Collectors.toList());
System.out.println("提取属性"+collect);
// 去重
List<String> collect1 = users.stream().map(User::getName).distinct().collect(Collectors.toList());
System.out.println("去重"+collect1);
}
}
@Data
@AllArgsConstructor
@ToString
class User {
private String name;
private String test;
}