private void performScanFiltering(TaskMonitor monitor, List<MemoryMatch> matches) {
			monitor.initialize(matches.size(), "Scanning for changes...");
			List<MemoryMatch> scanResults = new ArrayList<>();
			for (MemoryMatch match : matches) {
				if (scanner.accept(match)) {
					scanResults.add(match);
				}
				if (monitor.isCancelled()) {
					break;
				}
			}

			MemoryMatch firstIfReduced = getFirstMatchIfReduced(matches, scanResults);
			tableModel.addInitialLoadListener(b -> tableLoadComplete(firstIfReduced));
			tableModel.setLoader(new RefreshResultsTableLoader(scanResults));
		}
Internal panel of the memory search window that manages the display of the search results
in a table. This panel also includes most of the search logic as it has direct access to the
table for showing the results.
Ghidra/Features/Base/src/main/java/ghidra/features/base/memsearch/gui/MemorySearchResultsPanel.java