private void func(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { // ...pred.test is OK } else if (o instanceof Collection && ((Collection) o).stream().filter(i -> i instanceof Map).anyMatch(pred)) { // ...anyMatch here gives the above error }}
private void func(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { // ...pred.test is OK } else if (o instanceof Collection && ((Collection) o).stream().filter(i -> i instanceof Map).<Map>map(Map.class::cast).anyMatch(pred)) { // ...anyMatch now works }}
或者使用更简洁的类型转换:
private void func(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { // ...pred.test is OK } else if (o instanceof Collection && ((Collection) o).stream().filter(i -> i instanceof Map).map(i -> (Map) i).anyMatch(pred)) { // ...anyMatch now works }}
private void func(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { // ...pred.test is OK } else if (o instanceof Collection && ((Collection) o).stream() .<Map>mapMulti((i, consumer) -> { if (i instanceof Map m) consumer.accept(m); }) .anyMatch(pred)) { // ...anyMatch now works }}
import java.util.Collection;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.function.Predicate;public class StreamPredicateExample { private void funcWithMap(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { System.out.println("Direct Map test OK"); } else if (o instanceof Collection) { boolean anyMatch = ((Collection) o).stream() .filter(i -> i instanceof Map) .map(i -> (Map) i) // Using map for type conversion .anyMatch(pred); System.out.println("Collection with map using map: " + anyMatch); } } private void funcWithMapMulti(Object o) { Predicate<Map> pred = m -> true; if (o instanceof Map && pred.test((Map) o)) { System.out.println("Direct Map test OK"); } else if (o instanceof Collection) { boolean anyMatch = ((Collection) o).stream() .<Map>mapMulti((i, consumer) -> { // Using mapMulti for type conversion and filtering if (i instanceof Map m) consumer.accept(m); }) .anyMatch(pred); System.out.println("Collection with map using mapMulti: " + anyMatch); } } public static void main(String[] args) { StreamPredicateExample example = new StreamPredicateExample(); Map map = new HashMap(); map.put("key1", 1); map.put("key2", 2); List list = List.of("string", 123, map, new HashMap()); example.funcWithMap(map); example.funcWithMap(list); example.funcWithMapMulti(map); example.funcWithMapMulti(list); }}
使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…