Как сделать список, который содержит только один атрибут и не повторяется в Spring Boot? - PullRequest
0 голосов
/ 05 марта 2019

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

Сущность выглядит так:

import org.springframework.data.annotation.Id;

import java.util.Arrays;

public class Cities {
    @Id
    private String _id;
    private String city;
    private String[] loc;
    private String pop;
    private String state;

    public String get_id() {
        return _id;
    }

    public void set_id(String _id) {
        this._id = _id;
    }

    String getLocation() {
        return loc[0] + " " + loc[1];
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String[] getLoc() {
        return loc;
    }

    public void setLoc(String[] loc) {
        this.loc = loc;
    }

    public String getPop() {
        return pop;
    }

    public void setPop(String pop) {
        this.pop = pop;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "Cities{" +
                "_id='" + _id + '\'' +
                ", city='" + city + '\'' +
                ", loc=" + Arrays.toString(loc) +
                ", pop='" + pop + '\'' +
                ", state='" + state + '\'' +
                '}';
    }
}

У меня есть мой репозитой, как это:

import com.sbmongo.starbucks.Entity.Cities;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("citiesRepository")
public interface CitiesRepository extends MongoRepository<Cities, String> {
    public Cities findBy_id(ObjectId _id);
    public List<Cities> findByCity(String city);
    public List<Cities>  findAllByCity();
}

А мой контроллер выглядит так:

import com.sbmongo.starbucks.Constant.ViewConstant;
import com.sbmongo.starbucks.Entity.Cities;
import com.sbmongo.starbucks.Repository.CitiesRepository;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

@Controller
@RequestMapping("/starbucks")
public class CitiesController {

    @Autowired
    @Qualifier("citiesRepository")
    private CitiesRepository citiesRepository;

    @GetMapping("/cities")
    public ModelAndView listCities(){
        ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
        mav.addObject("cities", citiesRepository.findAll());
        return mav;
    }

    @GetMapping("/searchCity")
    public ModelAndView searchCity(@RequestParam(name = "city", required = false)String city){
        ModelAndView mav = new ModelAndView(ViewConstant.CITIES);
        mav.addObject("cities", citiesRepository.findByCity(city.toUpperCase()));
        System.out.println(citiesRepository.findByCity(city.toUpperCase()));
        return mav;
    }

    @GetMapping("/sortAllCities")
    public void sortAllCities(){
        List<Cities> cities = citiesRepository.findAllByCity();
    }
}

Но когда я пытаюсь это сделать, я выкидываю исключение IndexOutOfBoundsException. Я просто хочу показать в списке названия городов и не повторять их.

1 Ответ

0 голосов
/ 05 марта 2019

Чтобы заполнить список уникальных имен, используйте Set, затем зациклите и заполните новый объект. Если вам нужен ключ, замените набор на карту.

Надеюсь, что этот пример поможет

       List<Cities> citiesList = findAllByCity();
        Set<Cities> uniqueCities = new HashSet<>();
        citiesList.forEach(c ->{
            uniqueCities.add(c);
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...