java1.8中集合的使用removeIf、List转Map

1. removeIf

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

//过滤30岁以上人
collection.removeIf(
	person -> person.getAge() >= 30
);

2. List根据内部元素转换Map结构

public class StreamTest {

    public static List<User> users;

    static {
        users = new ArrayList<>();
        User user1 = new User();
        user1.setName("xiaoming1");
        user1.setSex("男");
        user1.setAge(22);

        User user2 = new User();
        user2.setName("xiaoming2");
        user2.setSex("女");
        user2.setAge(21);

        User user3 = new User();
        user3.setName("xiaoming3");
        user3.setSex("男");
        user3.setAge(22);

        User user4 = new User();
        user4.setName("xiaoming4");
        user4.setSex("男");
        user4.setAge(23);

        User user5 = new User();
        user5.setName("xiaoming5");
        user5.setSex("女");
        user5.setAge(19);

        User user6 = new User();
        user6.setName("xiaoming6");
        user6.setSex("男");
        user6.setAge(22);

        users.add(user1);
        users.add(user2);
        users.add(user3);
        users.add(user4);
        users.add(user5);
        users.add(user6);
    }

    public static void main(String[] args) {
        testToMap();
    }

    public static void testToMap() {
        /**
         * key:getSex
         * value: getName
         * (k1, k2) -> k1 + "," + k2 : 如果有相同的key,则value按照逗号合并
         */
        Map<String, String> collect = users.stream().collect(Collectors.toMap(User::getSex, User::getName, (k1, k2) -> k1 + "," + k2));
        System.out.println(JSON.toJSONString(collect));
    }
}

输出

{"女":"xiaoming2,xiaoming5","男":"xiaoming1,xiaoming3,xiaoming4,xiaoming6"}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 1.8,可以使用lambda表达式将List换为Map。具体实现方法如下: 首先,我们需要创建一个List对象: ```java List<String> list = new ArrayList<>(); list.add("apple"); list.add("orange"); list.add("banana"); ``` 然后,我们可以使用lambda表达式将List换为Map: ```java Map<String, Integer> map = list.stream() .collect(Collectors.toMap(Function.identity(), String::length)); ``` 这行代码的意思是将List的元素作为Map的key,将元素的长度作为Map的value。其,`Function.identity()`表示将元素本身作为key,`String::length`表示将元素的长度作为value。 我们也可以使用lambda表达式将List的元素换为自定义的对象,并将其作为Map的value: ```java List<Person> list = new ArrayList<>(); list.add(new Person("Tom", 20)); list.add(new Person("Jerry", 30)); list.add(new Person("Kate", 25)); Map<String, Integer> map = list.stream() .collect(Collectors.toMap(Person::getName, Person::getAge)); ``` 这行代码的意思是将List的Person对象的name作为Map的key,将age作为Map的value。 注意,如果List有重复的元素作为key,那么会抛出`java.lang.IllegalStateException`异常。此时,我们可以使用第三个参数来指定如何解决冲突,例如: ```java Map<String, Integer> map = list.stream() .collect(Collectors.toMap(Person::getName, Person::getAge, (a, b) -> a)); ``` 这行代码的意思是,如果出现重复的key,那么保留第一个key对应的value,忽略后面的value。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值