Java - Lambda 笔记

1. 创建单个值的集合
package java.util.Collections;

List<String> list = Collections.singletonList("String");
Map<String, String> map = Collections.singletonMap("key", "value");
2. 创建多个值的集合
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

package com.google.common.collect.Lists;

List<String> configKeyList = Lists.newArrayList("value1", "value2");
3. 取出对象集合中的某个字段组成一个新的集合
List<User> userList = new ArrayList<>();
// 直接获取
List<String> nameList = userList.stream().map(User::getName).collect(Collectors.toList());
// 有值需要转换
List<Integer> ageList = userList.stream().map(user -> user.getAge().intValue()).collect(Collectors.toList());
4. 排序(sort)
// 按年龄排序
List<User> userList = new ArrayList<>();
// 倒排
Collections.sort(userList, new Comparator<User>() {
    public int compare(User user1, User user2) {
        return user2.getAge().compareTo(user1.getAge());
    }
});
// 正排
Collections.sort(userList, new Comparator<User>() {
    public int compare(User user1, User user2) {
        return user1.getAge().compareTo(user2.getAge());
    }
});
4.1 排序(stream)
// 按字符串长度排序
String[] strs = {"abcd", "abc", "a", "ab", "123", "2bd9", "1a9d", "ad"};
List<String> strings = Arrays.asList(strs);
// 倒排
List<String> collectRe = strings.stream().sorted(Comparator.comparingInt(String::length).reversed()).collect(Collectors.toList());
// 正排
List<String> collect = strings.stream().sorted(Comparator.comparingInt(String::length)).collect(Collectors.toList());
5. 更改集合数据类型
List<Long> longList = new ArrayList<>();
List<String> strList = longList.stream().map(Object::toString).collect(Collectors.toList());
6. 对象集合简单分类
// 按照用户性别分类
Lisrt<User> userList = new ArrayList<>();
Map<String, List<User>> genderGroup = userList.stream().collect(Collectors.groupingBy(User::getGender));
7. 对象集合复杂分类
List<User> userList = new ArrayList<>();
// 按 <姓氏, 居住信息> 分类
Map<Map<String, PlaceInfo>, List<User>> userMap1 = userList.stream().collect(Collectors.groupingBy(
        user -> {
            Map<String, PlaceInfo> map = new HashMap<>();
            map.put(user.getSurName(), new PlaceInfo(user.getStreet(), user.getMonth()));
            return map;
}));
// 按 <居住信息> 分类, 并且排序, 对象需实现compareTo方法
Map<PlaceInfo, List<User>> userMap2 = userList.stream().collect(Collectors.groupingBy(
        user -> new PlaceInfo(user.getStreet(), user.getMonth()),
        TreeMap::new,
        toList()
));

// 举例: 对象实现compareTo方法
public class PlaceInfo implements Comparable<PlaceInfo> {

	// 入住时间
    private String month;
    // 街道
    private String street;
	// 楼层
	private String floor;
    
    // 二元排序
    /*@Override
    public int compareTo(@NotNull PlaceInfo o) {
        int compare = this.month.compareTo(o.month);
        if (compare != 0) {
            return compare;
        }
        return this.street.compareTo(o.street);
    }*/

	// 三元排序
    @Override
    public int compareTo(PlaceInfo o) {
        int c1 = this.month.compareTo(o.month);
        if (c1 != 0) {
            return c1;
        }
        if (this.street != null && o.street != null) {
            int c2 = this.floor.compareTo(o.floor);
            if (c2 != 0) {
                return c2;
            }
            return this.street.compareTo(o.street);
        } else {
            return this.floor.compareTo(o.floor);
        }
    }

}
8. 集合去重
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

package com.google.common.collect.Lists;

List<String> nameList = Lists.newArrayList("1", "1", "2", "3");
List<String> distinctNameList = nameList.stream().distinct().collect(Collectors.toList());
9. List转Map
Map<String, String> map = list.stream().collect(Collectors.toMap(User::getName, User::getPhone, (value1, value2) -> value2));

// Function.identity() -> 集合中的这个对象
Map<String, User> collect = list.stream().collect(Collectors.toMap(User::getName, Function.identity()));

// Function.identity() -> 集合中的这个对象
Map<String, User> map = list.stream().filter(user -> StringUtils.isBlank(user.getName())).collect(Collectors.toMap(User::getName, Function.identity(), (key1, key2) -> key2));
10. 集合过滤
// 留下小于等于100的值, 过滤掉大于100的值
List<Integer> filterList = list.stream().filter(value -> value <= 100).collect(Collectors.toList());
11. 创建指定排序规则的集合
TreeSet<User> treeSet = new TreeSet<>((Comparator.comparing(User::getAge)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值