### Question:
MappedFileQueue { public int deleteExpiredFileByTime(final long expiredTime, final int deleteFilesInterval, final long intervalForcibly, final boolean cleanImmediately) { Object[] mfs = this.copyMappedFiles(0); if (null == mfs) return 0; int mfsLength = mfs.length - 1; int deleteCount = 0; List<MappedFile> files = new ArrayList<MappedFile>(); if (null != mfs) { for (int i = 0; i < mfsLength; i++) { MappedFile mappedFile = (MappedFile) mfs[i]; long liveMaxTimestamp = mappedFile.getLastModifiedTimestamp() + expiredTime; if (System.currentTimeMillis() >= liveMaxTimestamp || cleanImmediately) { if (mappedFile.destroy(intervalForcibly)) { files.add(mappedFile); deleteCount++; if (files.size() >= DELETE_FILES_BATCH_MAX) { break; } if (deleteFilesInterval > 0 && (i + 1) < mfsLength) { try { Thread.sleep(deleteFilesInterval); } catch (InterruptedException e) { } } } else { break; } } else { break; } } } deleteExpiredFile(files); return deleteCount; } MappedFileQueue(final String storePath, int mappedFileSize,
        AllocateMappedFileService allocateMappedFileService); void checkSelf(); MappedFile getMappedFileByTime(final long timestamp); void truncateDirtyFiles(long offset); void backupFiles(long offset, String backupPath); boolean load(); long howMuchFallBehind(); MappedFile getLastMappedFile(final long startOffset, boolean needCreate); MappedFile getLastMappedFile(final long startOffset); MappedFile getLastMappedFile(); boolean resetOffset(long offset); long getMinOffset(); long getMaxOffset(); long getMaxWrotePosition(); long remainHowManyDataToCommit(); long remainHowManyDataToFlush(); void deleteLastMappedFile(); int deleteExpiredFileByTime(final long expiredTime,
        final int deleteFilesInterval,
        final long intervalForcibly,
        final boolean cleanImmediately); int deleteExpiredFileByOffset(long offset, int unitSize); boolean flush(final int flushLeastPages); boolean commit(final int commitLeastPages); MappedFile findMappedFileByOffset(final long offset, final boolean returnFirstOnNotFound); MappedFile getFirstMappedFile(); MappedFile findMappedFileByOffset(final long offset); long getMappedMemorySize(); boolean retryDeleteFirstFile(final long intervalForcibly); void shutdown(final long intervalForcibly); void destroy(); long getFlushedWhere(); void setFlushedWhere(long flushedWhere); long getStoreTimestamp(); List<MappedFile> getMappedFiles(); int getMappedFileSize(); long getCommittedWhere(); void setCommittedWhere(final long committedWhere);  }### Answer:
@Test public void testDeleteExpiredFileByTime() throws Exception { MappedFileQueue mappedFileQueue = new MappedFileQueue("target/unit_test_store/f/", 1024, null); for (int i = 0; i < 100; i++) { MappedFile mappedFile = mappedFileQueue.getLastMappedFile(0); assertThat(mappedFile).isNotNull(); byte[] bytes = new byte[512]; assertThat(mappedFile.appendMessage(bytes)).isTrue(); } assertThat(mappedFileQueue.getMappedFiles().size()).isEqualTo(50); long expiredTime = 100 * 1000; for (int i = 0; i < mappedFileQueue.getMappedFiles().size(); i++) { MappedFile mappedFile = mappedFileQueue.getMappedFiles().get(i); if (i < 5) { mappedFile.getFile().setLastModified(System.currentTimeMillis() - expiredTime * 2); } if (i > 20) { mappedFile.getFile().setLastModified(System.currentTimeMillis() - expiredTime * 2); } } mappedFileQueue.deleteExpiredFileByTime(expiredTime, 0, 0, false); assertThat(mappedFileQueue.getMappedFiles().size()).isEqualTo(45); }