Find duplicate in java list

Find Duplicate Objects in a List using Java

In this post, I will show you how to find duplicate objects in a List using Java’s Comparator interface implementation based on multiple fields in a POJO.

Prerequisites
The following configurations are required in order to run the application
Eclipse
JDK 1.8
Have maven installed and configured
Junit, Mockito, PowerMockito dependency in pom.xml

Now we will see the below steps how to create a maven based Java project in Eclipse
Step 1. Create a standalone maven project in Eclipse

Go to File -> New -> Other. On popup window under Maven select Maven Project. Then click on Next. Select the workspace location – either default or browse the location. Click on Next. Now in next window select the row as highlighted from the below list of archtypes and click on Next button.

maven-arctype-quickstart
Now enter the required fields (Group Id, Artifact Id) as shown below
Group Id : com.roytuts
Artifact Id : junit
Step 2. Modify the pom.xml file as shown below.

 4.0.0 com.roytuts java 0.0.1-SNAPSHOT jar java http://maven.apache.org UTF-8 1.8 4.11   junit junit $ test     org.apache.maven.plugins maven-compiler-plugin $ $    

Step 3. If you see JRE System Library[J2SE-1.5] then change the version by below process

Do right-click on the project and go to Build -> Configure build path, under Libraries tab click on JRE System Library[J2SE-1.5], click on Edit button and select the appropriate jdk 1.8 from the next window. Click on Finish then Ok.

Step 4. Create a Model class called Car. So we will determine duplicate car is found based on make, model and year fields.

package com.roytuts.model; public class Car < private String make; private String model; private int year; private boolean turnSignal; public Car() < >public Car(String make, String model, int year, boolean turnSignal) < this.make = make; this.model = model; this.year = year; this.turnSignal = turnSignal; >public String getMake() < return make; >public void setMake(String make) < this.make = make; >public String getModel() < return model; >public void setModel(String model) < this.model = model; >public int getYear() < return year; >public void setYear(int year) < this.year = year; >public boolean isTurnSignal() < return turnSignal; >public void setTurnSignal(boolean turnSignal) < this.turnSignal = turnSignal; >public String toString() < return "Car [make=" + make + ", model=" + model + ", year=" + year + ", turnSignal=" + turnSignal + "]"; >>

Step 5. Create CarComparator class to compare each fields of the Car model class

package com.roytuts.comparator; import java.util.Comparator; import com.roytuts.model.Car; public class CarComparator implements Comparator  < @Override public int compare(Car c1, Car c2) < int m = c1.getMake().compareToIgnoreCase(c2.getMake()); if (m != 0) < return m; >int md = c1.getModel().compareToIgnoreCase(c2.getModel()); if (md != 0) < return md; >return Integer.compare(c1.getYear(),c2.getYear()); > >

Step 6. Create CarUtils class to create utility method for finding duplicates

package com.roytuts.utils; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.TreeSet; import com.roytuts.comparator.CarComparator; import com.roytuts.model.Car; public class CarUtils < public ListgetDuplicateCars(final List cars) < Listduplicates = new ArrayList(); Set carSet = new TreeSet(new CarComparator()); for (Car car : cars) < if (!carSet.add(car)) < duplicates.add(car); >> return duplicates; > >

Step 7. Create Junit class called CarTest which will test for duplicate Cars in a List of Cars

package com.roytuts.test; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.roytuts.model.Car; import com.roytuts.utils.CarUtils; public class CarTest < private CarUtils utils; private Listcars; @Before public void setUp() throws Exception < utils = new CarUtils(); populateCars(); >@After public void tearDown() throws Exception < cars.clear(); >@Test public void testGetDuplicateCars() < ListduplicateCars = utils.getDuplicateCars(cars); System.out.println("Duplicate cars"); for (Car car : duplicateCars) < System.out.println(car); >> private void populateCars() < if (cars != null && !cars.isEmpty()) < return; >cars = new ArrayList(); Car car1 = new Car("Tata Motors", "Indica", 1990, true); Car car2 = new Car("Tata Motors", "Sumo", 1992, true); Car car3 = new Car("Maruti Suzuki", "WagonR", 1990, true); Car car4 = new Car("Tata Motors", "Sumo", 1994, true); Car car5 = new Car("Tata Motors", "Indica", 1990, true); Car car6 = new Car("Maruti Suzuki", "Swift", 2006, true); Car car7 = new Car("Hundai", "SX4", 1990, true); Car car8 = new Car("Tata Motors", "Zica", 2015, true); Car car9 = new Car("Maruti Suzuki", "Dzire", 2008, true); Car car10 = new Car("Maruti Suzuki", "Swift", 2006, true); cars.add(car1); cars.add(car2); cars.add(car3); cars.add(car4); cars.add(car5); cars.add(car6); cars.add(car7); cars.add(car8); cars.add(car9); cars.add(car10); > >

Step 8. Now run the above Junit test class, you will see the below output

Duplicate cars Car [make=Tata Motors, model=Indica, year=1990, turnSignal=true] Car [make=Maruti Suzuki, model=Swift, year=2006, turnSignal=true]

Источник

Кофе-брейк #209. 4 способа найти дубликаты в Java List. Как создать простой медиаплеер с помощью Java

Java-университет

Кофе-брейк #209. 4 способа найти дубликаты в Java List. Как создать простой медиаплеер с помощью Java - 1

Источник: Codippa В этой статье рассмотрены различные способы поиска дубликатов в List. Дубликатами мы называет элементы, которые встречаются более одного раза.

1. Использование Set

  • Создаем новый объект Java Set и новый ArrayList для хранения повторяющихся элементов.
  • Выполняем итерацию или цикл по списку.
  • Каждый элемент в списке добавляем в Set , используя метод add() .
  • В результате add() возвращает true, если элемент добавлен, и false, если элемент уже присутствовал в Set .
  • Если элемент уже есть в Set , он является дубликатом. Тогда мы добавляем его в ArrayList .
  • В конце итерации новый ArrayList будет содержать все повторяющиеся элементы из исходного списка ( List ).
 List numbers = List.of(1, 2, 3, 4, 3, 1, 2); Set set = new HashSet<>(); List duplicates = new ArrayList<>(); numbers.forEach(n -> < if (!set.add(n)) < duplicates.add(n); >>); System.out.println("Duplicate elements: " + duplicates); 

Обратите внимание, что для перебора List мы использовали метод forEach() , но вы можете использовать и любой другой способ.

2. Использование Map

  • Создайте новый объект Map и новый ArrayList для хранения повторяющихся элементов.
  • Ключами этого Map будут элементами исходного List , а его значения будут количеством их вхождений в List .
  • Выполните цикл по списку ( List ).
  • Для каждого элемента в List проверьте, существует ли он как ключ в Map , используя метод containsKey() .
  • Если он существует, увеличьте его значение в Map и добавьте его снова, используя метод put() .
  • Если он не существует, добавьте его в Map со значением 1.
  • После завершения итерации списка все элементы Map со значением больше 1 становятся дубликатами.
  • Наконец, выполните итерацию Map и добавьте те элементы, значение которых больше 1, в список для хранения повторяющихся элементов.
 List numbers = List.of(1, 2, 3, 4, 3, 1, 2); Map countMap = new HashMap<>(); List duplicates = new ArrayList<>(); numbers.forEach(n -> < if (countMap.containsKey(n)) < countMap.put(n, countMap.get(n) + 1); >else < countMap.put(n, 1); >>); countMap.keySet().forEach(k -> < if(countMap.get(k)>1) < duplicates.add(k); >>); 

3. Использование вложенных циклов (nested loops)

  • Выполните цикл по списку ( List ).
  • После того, как цикл выполнен первый раз, вернитесь к началу и снова повторите все действия для поиска каждого элемента в оставшейся части списка.
  • Если текущий элемент цикла равен любому из оставшихся элементов, он является дубликатом.
 List numbers = List.of(1, 2, 3, 4, 3, 1, 2); List duplicates = new ArrayList<>(); for (int i = 0; i < numbers.size() - 1; i++) < for (int j = i + 1; j < numbers.size(); j++) < if (numbers.get(i).equals(numbers.get(j))) < duplicates.add(numbers.get(i)); >> > 

4. Использование Java Stream

  • Преобразуйте List в поток ( Stream ).
  • Преобразуйте поток в Map , используя метод collect() . Например, ключ ( key ) — это каждый элемент в списке, а значение ( value ) — это количество вхождений.
  • Метод collect() возвращается, и Map принимает Collector в качестве аргумента. Реализация Collector определяет ключи и значения результирующего Map .
  • Поскольку мы хотим, чтобы ключи Map были элементами списка ( List ), а его значения были числом их вхождений, для создания коллектора мы можем использовать Collectors.groupingBy() .
  • Как только Map будет создан с помощью groupingBy() , используйте метод entrySet() для получения набора объектов Map.Entry .
  • Отфильтруйте записи на основе значения (то есть количества вхождений) больше 1.
  • Сопоставьте отфильтрованные записи с их ключами.
 List numbers = List.of(1, 2, 3, 4, 3, 1, 2); Map map = numbers. stream(). collect( Collectors. groupingBy(n -> n, Collectors.counting()) ); List duplicates = map. entrySet(). stream(). filter(e -> e.getValue() > 1). map(e -> e.getKey()). collect(Collectors.toList()); 
  • Критерий предоставляется в виде лямбда-выражения, поскольку groupingBy() принимает аргумент Function , который является функциональным интерфейсом.
  • В данном случае мы группируем по функции идентичности n -> n , что означает, что мы группируем элементы списка по их значениям.
  • Второй аргумент groupingBy() — это еще один коллектор, который указывает, как элементы в каждой группе должны быть объединены.
  • Здесь мы используем Collectors.counting() , который создает Map , содержащий количество каждого элемента в списке.

Как создать простой медиаплеер с помощью Java

Кофе-брейк #209. 4 способа найти дубликаты в Java List. Как создать простой медиаплеер с помощью Java - 2

Источник: Medium Это руководство поможет вам создать на Java простой медиаплеер для воспроизведения аудио- и видеофайлов. Разработка медиаплеера может стать отличным способом научиться использовать встроенные библиотеки Java для работы с медиафайлами. Чтобы выполнить эту задачу, мы будем использовать JavaFX и набор инструментов для графического пользовательского интерфейса (GUI) для Java.

Шаг 1: Настройка проекта

Для начала нам нужно настроить наш Java-проект. В качестве IDE мы будем использовать Eclipse, но вы можете работать с любой IDE по своему выбору. Создайте новый проект Java и назовите его “MediaPlayer”. Нам также нужно будет добавить библиотеку JavaFX в наш проект. Для этого перейдите в свойства проекта и добавьте библиотеку JavaFX в путь сборки проекта.

Шаг 2: Создание пользовательского интерфейса

Далее мы создадим пользовательский интерфейс для нашего медиаплеера. Это будет простой пользовательский интерфейс с кнопкой воспроизведения, кнопкой остановки и панелью медиаплеера, где отображается видео- или аудиофайл, который мы хотим воспроизвести. Для нашего интерфейса мы будем использовать макет BorderPane. Панель медиаплеера будет находиться в центре BorderPane, а кнопки воспроизведения и остановки — в нижней части BorderPane. Вот код пользовательского интерфейса:

 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.stage.Stage; public class MediaPlayerApp extends Application < private MediaPlayer mediaPlayer; @Override public void start(Stage primaryStage) throws Exception < primaryStage.setTitle("Media Player"); Button playButton = new Button("Play"); playButton.setOnAction(e ->mediaPlayer.play()); Button stopButton = new Button("Stop"); stopButton.setOnAction(e -> mediaPlayer.stop()); BorderPane borderPane = new BorderPane(); Media media = new Media("http://www.example.com/sample.mp4"); mediaPlayer = new MediaPlayer(media); MediaView mediaView = new MediaView(mediaPlayer); borderPane.setCenter(mediaView); borderPane.setBottom(stopButton); borderPane.setRight(playButton); Scene scene = new Scene(borderPane, 600, 400); primaryStage.setScene(scene); primaryStage.show(); > public static void main(String[] args) < launch(args); >> 

В этом коде мы создаем две кнопки: playButton и stopButton . При нажатии кнопки воспроизведения мы вызываем метод play() объекта mediaPlayer . При нажатии кнопки остановки мы вызываем метод stop() объекта mediaPlayer . Мы также создаем объект Media с URL-адресом примера видеофайла и объект mediaPlayer с объектом Media . Наконец, мы создаем объект MediaView с объектом MediaPlayer и устанавливаем его в качестве центра BorderPane .

Шаг 3. Тестирование медиаплеера

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

Шаг 4: Настройка медиаплеера

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

Источник

Читайте также:  Точность питон до сотых
Оцените статью