(To complete Ankit Malpani answer)
If 40 is provided by our lovely users, then you will have to restrict it to the list size:
posts.subList(posts.size()-Math.min(posts.size(),40), posts.size())
Another way to show it:
@Test
public void should_extract_last_n_entries() {
    List<String> myList = Arrays.asList("0","1","2","3","4");
    int myListSize = myList.size();
    log.info(myList.subList(myListSize,myListSize).toString());   // output : []
    log.info(myList.subList(myListSize-2,myListSize).toString()); // output : [3, 4]
    log.info(myList.subList(myListSize-5,myListSize).toString()); // output : [0, 1, 2, 3, 4]
    int lastNEntries = 50; // now use user provided int
    log.info(myList.subList(myListSize-Math.min(myListSize,lastNEntries),myListSize).toString());
                          // output : [0, 1, 2, 3, 4]
    // log.info(myList.subList(myListSize-lastNEntries,myListSize).toString());
                          // ouch IndexOutOfBoundsException: fromIndex = -45
}