predicate/Stream操作集合

通过Java Stream API进行集合操作,包括过滤特定条件(如id包含特定字符)、统计id长度等,展示了Stream的强大功能。例如,找出id包含'格'字的人数为2,id长度大于3的个数为3,含有'·'的id数量为3,并列举了相关实例。
摘要由CSDN通过智能技术生成
/**
 * 操作集合
 */

import java.util.Collection;
import java.util.HashMap;
import java.util.function.Predicate;
import java.util.function.ToIntFunction;

public class Test_Collection {
    public static void main(String[] args) {
        HashMap<Integer, String> m = new HashMap<>();
        m.put(1, "卡加斯·刃拳");
        m.put(2, "古尔丹");
        m.put(3, "纳兹格林将军");
        m.put(4, "格罗姆·地狱咆哮");
        m.put(5, "耐奥祖");
        m.put(6, "杜隆坦");
        m.put(7, "奥格瑞姆·毁灭之锤");
        m.put(8, "萨尔");
        m.put(9, "黑手");
        m.put(0, "风行者将军");
        Collection<String> setV = m.values();
        //用predicate操作集合
        System.out.println("删除将军?-" + setV.removeIf(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.contains("将军");
            }
        }));
        System.out.println("id含有格字的人数是:" + calAll(
                setV,
                new Predicate() {
                    @Override
                    public boolean test(Object o) {
                        return ((String) o).contains("格");
                    }
                }));
        //改写成lambda表达式
        System.out.println("id长度大于3:" + calAll(setV, o -> ((String) o).length() > 3));
        System.out.println("id含有·:" + calAll(setV, o -> ((String) o).contains("·")));
        System.out.println(setV);

        //用流操作
        System.out.println("每个名字长度:");
        setV.stream().mapToInt(new ToIntFunction<String>() {
            @Override
            public int applyAsInt(String value) {
                return value.length();
            }
        }).forEach(System.out::print);
        System.out.println();
        System.out.println("id长度超过5:" + setV.stream().filter(s -> s.length() > 5).count());


        System.out.println("最长的名字字数:" + setV.stream().mapToInt(value -> value.length()).max());
    }

    /**
     * 用predicate操作集合
     *
     * @param ts
     * @param p
     * @return
     */
    public static int calAll(Collection ts, Predicate p) {
        int total = 0;
        for (Object t : ts) {
            if (p.test(t)) {
                total++;
            }
        }
        return total;
    }
}

删除将军?-true
id含有格字的人数是:2
id长度大于3:3
id含有·:3
[卡加斯·刃拳, 古尔丹, 格罗姆·地狱咆哮, 耐奥祖, 杜隆坦, 奥格瑞姆·毁灭之锤, 萨尔, 黑手]
每个名字长度:
63833922
id长度超过5:3
最长的名字字数:OptionalInt[9]

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值