private SipModel.ScanPredicate createPredicate() { final String filterString = filterField.getText().trim(); switch ((Filter) filterBox.getSelectedItem()) { case REGEX: return new SipModel.ScanPredicate() { @Override public boolean accept(MetadataRecord record) { return record.contains(Pattern.compile(filterString)); } }; case MODULO: int modulo; try { modulo = Integer.parseInt(filterString); } catch (NumberFormatException e) { modulo = 1; } if (modulo <= 0) modulo = 1; final int recordNumberModulo = modulo; return new SipModel.ScanPredicate() { @Override public boolean accept(MetadataRecord record) { return recordNumberModulo == 1 || record.getRecordNumber() % recordNumberModulo == 0; } }; default: throw new RuntimeException(); } }