### Question:
TxEntities { public void forEachReverse(BiConsumer<String, TxEntity> action) { ListIterator<Map.Entry<String, TxEntity>> iterator = new ArrayList<>(entities.entrySet()).listIterator(entities.size()); while (iterator.hasPrevious()) { Map.Entry<String, TxEntity> entry = iterator.previous(); action.accept(entry.getKey(),entry.getValue()); } }  void forEach(BiConsumer<String, TxEntity> action); void forEachReverse(BiConsumer<String, TxEntity> action); TxEntity get(String localTxId); boolean exists(String localTxId); TxEntity put(String localTxId, TxEntity txEntity); int size(); boolean hasCommittedTx(); boolean hasCompensationSentTx(); boolean hasCompensationFailedTx();  }### Answer:
@Test public void testForEachReverse(){ TxEntity t1 = TxEntity.builder().beginTime(new Date(System.currentTimeMillis())).build(); TxEntity t2 = TxEntity.builder().beginTime(new Date(System.currentTimeMillis()+10)).build(); TxEntity t3 = TxEntity.builder().beginTime(t2.getBeginTime()).build(); TxEntity t4 = TxEntity.builder().beginTime(new Date(System.currentTimeMillis()+20)).build(); List<TxEntity> entities = Lists.newArrayList(t4, t3, t2, t1); TxEntities txEntities = new TxEntities(); ListIterator<TxEntity> iterator = entities.listIterator(entities.size()); while(iterator.hasPrevious()){ entities.forEach(t->txEntities.put(UUID.randomUUID().toString(),iterator.previous())); } List<TxEntity> reverseEntities = new ArrayList(); txEntities.forEachReverse((k,v)->{ reverseEntities.add(v); }); assertTrue(Iterables.elementsEqual(entities, reverseEntities)); }