Java8 中map中删除元素的简单方法

简介: Java8 中map中删除元素的简单方法

传统的,在JAVA中得MAP中删除元素,可以这样,假设有个MAP:


Map map = new HashMap<>();


map.put(1,“value 1”);


map.put(2,“value 2”);


map.put(3,“value 3”);


for(Iterator iterator = map.keySet().iterator(); iterator.hasNext(); ) {


Integer key = iterator.next();


if(key != 1) {


iterator.remove();


}


}


而在JAVA8中,可以这样了,更为简单:


// 根据map中得值去判断删除


map.values().removeIf(value -> !value.contains(“1”));


// 根据key删除


map.keySet().removeIf(key -> key != 1);


//通过getkey()方法获得值去删除


map.entrySet().removeIf(entry -> entry.getKey() != 1);


MAP本身没办法用removeif,要通过keySet,EntrySet去调用removeif方法,再看源码:


/**


* 移除集合中满足给定条件的所有元素,错误或者运行时异常发生在迭代时或者把条件传递给调用者的时候。


*


* @implSpec


* 默认的实现贯穿了使用迭代器iterator的集合的所有元素。每一个匹配的元素都将被用Iterator接口中的


* remove()方法移除。如果集合的迭代器不支持移除,则在第一次匹配时就会抛出异常 UnsupportedOperationException


*


* @param filter 令元素移除成功的条件


* @return {@code true} 如果所有的元素都被移除


* @throws NullPointerException 如果有一个过滤器是空的


* @throws UnsupportedOperationException 如果元素不能被从该集合中移除。如果一个匹配元素不能被移除,


* 通常来说,它就不支持移除操作,这时可能抛出这个异常。


* @since 1.8


*/


default boolean removeIf(Predicate super E> filter) {


Objects.requireNonNull(filter);


boolean removed = false;


final Iterator each = iterator();


while (each.hasNext()) {


if (filter.test(each.next())) {


each.remove();


removed = true;


}


}


return removed;


}


也可以这样用:


public static void main(String[] args) {


List list = new ArrayList<>();


list.add(“a”);


list.add(“b”);


list.add(“c”);


list.add(“d”);


// 这里单独定义了过滤


Predicate predicate = (s) -> s.equals(“a”);


// 过滤掉a的元素


list.removeIf(predicate);


System.out.println(list.toString());


}


相关文章
|
1月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
74 9
|
1月前
|
存储
`map()`方法在什么场景下会比 `forEach()`方法更高效?
综上所述,当需要对数组元素进行复杂的转换并生成新数组、进行链式调用和函数式编程、处理元素之间存在明确映射关系的情况以及与其他数组方法结合使用时,`map()`方法比`forEach()`方法更高效,能够使代码更加简洁、清晰和易于维护。
60 32
|
29天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
41 4
|
29天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
29 4
|
27天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
26 1
|
1月前
|
存储 JavaScript 前端开发
如何选择使用`map()`方法和`forEach()`方法?
选择使用`map()`方法还是`forEach()`方法主要取决于操作的目的、是否需要返回值、代码的可读性和维护性等因素。在实际开发中,需要根据具体的业务需求和场景来灵活选择合适的方法,以实现更高效、更易读和更易维护的代码。
26 3
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
132 4
|
1月前
|
Java 开发者
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
210 2