@Override
			public int size() {
				try (LockHold hold = LockHold.lock(readLock())) {
					int sum = 0;
					for (M m : spaces) {
						sum += func.apply(m).size();
					}
					return sum;
				}
			}
Compose a collection, lazily, from collections returned by delegates

@param spaces the delegates
@param func a collection getter for each delegate
@return the lazy catenated collection
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/space/DBTraceDelegatingManager.java