compute(计算

如果指定的键没有对应的值(没有该键或者该键对应的值是空),
那么使用该键计算新的值,并将其添加到 Map 中

computeIfAbsent(不存在时计算)

computeIfPresent ——如果指定的键在 Map 中存在,就计算该键的新值,并将其添加
到 Map 中

computeIfPresent(存在时计算)

compute ——使用指定的键计算新的值,并将其存储到 Map 中。

相同:返回值是返回最新的值

不相同:compute是有则覆盖,没则添加;computeIfAbsent是有则不操作,没则添加;computeIfPresent是有则覆盖,没值的时候不操作

package com.stpass.upload.handler;

 
import java.util.*; 

public class Main {
 
    public static void main(String[] args) {

        Map map = new HashMap<String, String>();
        Object put = map.put("键", "对应的值");//如果有值则覆盖,没有则添加。如果没值则返回空,有则返回上次的值
        Object put2 = map.put("键", "对应的值2");//如果有值则覆盖,没有则添加。如果没值则返回空,有则返回上次的值
        Object put3 = map.put("键", "对应的值3");//如果有值则覆盖,没有则添加。如果没值则返回空,有则返回上次的值
        System.out.println(put); //输出结果  null
        System.out.println(put2); //输出结果(上次的值)  对应的值
        System.out.println(put3); //输出结果(上次的值)  对应的值2

        //02 这里的操作等价于 01 的操作 k代表键,v代表值
        Map mapCompute = new HashMap<String, String>();
        Object mapComputeValue = mapCompute.compute("键", (k, v) -> "对应的值");//有值则覆盖,没值则添加,这个跟put一样,但是返回是目前的值,put是返回上次的值
        Object mapComputeValue2 = mapCompute.compute("键", (k, v) -> "对应的值2");//有值则覆盖,没值则添加,这个跟put一样,但是返回是目前的值,put是返回上次的值
        System.out.println(mapComputeValue); //输出结果  对应的值
        System.out.println(mapComputeValue2); //输出结果  对应的值2

        //03 如果map中不存在等于"键"的k,则添加为"键"的k以及"对应的值",如果有,则不操作
        System.out.println("--------------mapComputeIfAbsent-----------------");
        Map mapComputeIfAbsent = new HashMap<String, String>();
        Object valueAbsent = mapComputeIfAbsent.computeIfAbsent("键", k -> "value");
        Object valueAbsent2 = mapComputeIfAbsent.computeIfAbsent("键", k -> "value2");
        System.out.println(mapComputeIfAbsent); //输出结果 {键=value}
        System.out.println(valueAbsent); //输出结果 value
        System.out.println(valueAbsent2); //输出结果 value


        //04 如果map中不存在等于"键"的k,则不操作,有才覆盖,跟computeIfAbsent相反
        System.out.println("--------------computeIfPresent-----------------");
        Map mapIfPresent = new HashMap<String, String>();
        Object valuePresent = mapIfPresent.computeIfPresent("键", (k,v) -> "value");
        System.out.println(mapIfPresent); //输出结果 {}
        System.out.println(valuePresent); //输出结果 null
        mapIfPresent.put("键", "对应的值");
        Object valuePresent2 = mapIfPresent.computeIfPresent("键",(k,v) -> "value2");
        System.out.println(mapIfPresent); //输出结果 {键=value2}
        System.out.println(valuePresent2); //输出结果 value2


        System.out.println(mapIfPresent.remove("键","对应的值"));
        System.out.println(mapIfPresent.remove("键","value2"));
        System.out.println("------------------getOrDefault----------------------------");
        Map getOrdefault = new HashMap<String, String>();
        Object orDefault = getOrdefault.getOrDefault("java", "ifconfig");//这里ifconfig是一个默认值,不会添加到Map里面去
        System.out.println(orDefault);
        System.out.println(getOrdefault);

        System.out.println("------------------replaceAll----------------------------");
        Map<String, String> favouriteMovies = new HashMap<>();
        favouriteMovies.put("Raphael", "Star Wars");
        favouriteMovies.put("Olivia", "james bond");
        favouriteMovies.replaceAll((friend, movie) -> {return friend.toLowerCase();});
        System.out.println(favouriteMovies);//输出 {Olivia=olivia, Raphael=raphael}

        System.out.println("------------------replace----------------------------");
        Map<String, String> favouriteMovies2 = new HashMap<>();
        favouriteMovies2.put("Raphael", "Star Wars");
        favouriteMovies2.put("Olivia", "james bond");
        favouriteMovies2.replace("Raphael","bond");
        System.out.println(favouriteMovies2);;//输出 {Olivia=james bond, Raphael=bond}


        System.out.println("------------------merge----------------------------");
        Map<String, String> m1 = new HashMap<>();
        m1.put("Raphael", "Star Wars");
        m1.put("Olivia2", "james bond2");
        m1.put("Olivia", "james bon2d");
        Map<String, String> m2 = new HashMap<>();
        m2.put("Raphael", "Star Wars");
        m2.put("Olivia", "james bond");

        Map<String, String> everyone = new HashMap<>(m1);
        everyone.putAll(m2);
        System.out.println(everyone);//{Olivia=james bond, Raphael=Star Wars, Olivia2=james bond2}

        Map<String, String> everyone2 = new HashMap<>(m1);

        m2.forEach((k,v)->everyone2.merge(k,v,(k1,k2)->k1+"&"+k2));//{Olivia=james bon2d&james bond, Raphael=Star Wars&Star Wars, Olivia2=james bond2}
        m2.forEach((k,v)->everyone2.merge(k,v,(k1,k2)->k1==k2?k1:k1+"&"+k2));//{Olivia=james bon2d&james bond, Raphael=Star Wars, Olivia2=james bond2}
        System.out.println(everyone2);



    }


}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐