Как сделать отсортированный список в Java?

Поддержка теперь встроена в Symfony. См. http://symfony.com/doc/master/cookbook/testing/doctrine.html

Вот что вы могли бы сделать:

namespace AppBundle\Tests;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class MyDatabaseTest extends KernelTestCase
{
    private $container;

    public function setUp()
    {
        self::bootKernel();

        $this->container = self::$kernel->getContainer();
    }
}

Для более современной и переработанной техники см. https://gist.github.com/jakzal/a24467c2e57d835dcb65 .

Обратите внимание, что использование контейнера в модульных тестах пахнет. Как правило, это означает, что ваши классы зависят от всего контейнера (весь мир), и это плохо. Вы должны ограничить свои зависимости и высмеять их.

2
задан Wendela Lövgren 17 January 2019 в 12:45
поделиться

2 ответа

// define comparators
final Comparator<Dog> SORT_BY_NAME_ASC = Comparator.comparing(Dog::getName);
final Comparator<Dog> SORT_BY_TAIL_LENGTH_ASC = Comparator.comparing(Dog::getTailLength);

// define a list
List<Dog> kennelList = Collections.emptyList();

// sort list items (you can swap comparators)
kennelList.sort(SORT_BY_NAME_ASC.thenComparing(SORT_BY_TAIL_LENGTH_ASC));

// retrieve items with at least required tailLength
public static List<Dog> filterByTailLength(List<Dog> kennelList, double tailLength) {
    return kennelList.stream()
            .filter(dog -> Double.compare(dog.getTailLength(), tailLength) >= 0)
            .collect(Collectors.toList());
}
0
ответ дан oleg.cherednik 17 January 2019 в 12:45
поделиться

Следующие четыре шага могут помочь вам: метод использует Java 8 Stream API

  • проверить список собак, если он пуст или пуст, то вывести сообщение об ошибке
  • список собак сортировки
  • отфильтровать список собак, чтобы найти целевую собаку
  • распечатать информацию о собаке

Предположим, что структура собаки выглядит следующим образом:

class Dog {
    private String name;
    private Double tailLength;
    private String owner;
}

Код в Java 8 следующим образом:

public static void listDogs(List<Dog> dogs, int tailLengh) {
    if (null == dogs || dogs.size() < 1) {
        System.out.println("no register dogs");
    } else dogs.stream()
            .sorted((o1, o2) -> o1.getTailLength().compareTo(o2.getTailLength()) == 0 ? o1.getName().compareTo(o2.getName()) : o1.getTailLength().compareTo(o2.getTailLength()))
            .filter(dog -> dog.getTailLength() >= tailLengh)
            .forEach(dog -> System.out.println(dog));
}

, если список отсортированных собак всегда использовался, вы должны хранить список отсортированных собак, поэтому вам не нужно каждый раз сортировать.

0
ответ дан TongChen 17 January 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: