группировка одинаковых наименований
This commit is contained in:
28
src/main/java/kinosearch/core/KinoGroup.java
Normal file
28
src/main/java/kinosearch/core/KinoGroup.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package kinosearch.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by DmitriyMX <mail@dmitriymx.ru>
|
||||
* 2016
|
||||
*/
|
||||
public class KinoGroup extends Kino {
|
||||
private List<Kino> kinolist = new ArrayList<>();
|
||||
|
||||
public KinoGroup(String name, String url) {
|
||||
super(name, "");
|
||||
}
|
||||
|
||||
public List<Kino> getKinolist() {
|
||||
return kinolist;
|
||||
}
|
||||
|
||||
public void add(Kino kino) {
|
||||
kinolist.add(kino);
|
||||
}
|
||||
|
||||
public boolean contains(Kino kino) {
|
||||
return kinolist.contains(kino);
|
||||
}
|
||||
}
|
||||
@@ -62,4 +62,10 @@ public class Tools {
|
||||
public static Pattern getStrongPattern(String name) {
|
||||
return Pattern.compile("(^"+name+"[\\s:])|(\\s"+name+"[\\s:])|(\\s"+name+"$)|(^"+name+"$)");
|
||||
}
|
||||
|
||||
public static String cleanString(String string) {
|
||||
return string.toLowerCase().
|
||||
replaceAll("[_\\+\\-\\.,!@#$%^&*\\(\\);:\\\\\\/\\|<>\"'?=`~№\\[\\]\\{\\}]", " ").
|
||||
replaceAll(" {2,}", " ").trim();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package kinosearch.webapp.servlets;
|
||||
|
||||
import kinosearch.core.Kino;
|
||||
import kinosearch.core.KinoGroup;
|
||||
import kinosearch.core.Tools;
|
||||
import kinosearch.webapp.WebApp;
|
||||
import kinosearch.webapp.template.TemplateProcessor;
|
||||
import kinosearch.core.warez.KinoWarez;
|
||||
import kinosearch.core.warez.Onlinelife;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
@@ -64,10 +64,62 @@ public class IndexServlet extends HttpServlet {
|
||||
}
|
||||
|
||||
model.put("searchtext", search);
|
||||
model.put("resultsearch", list);
|
||||
model.put("resultsearch", groupKino(list));
|
||||
model.put("strong", strong);
|
||||
}
|
||||
|
||||
private List<Kino> groupKino(List<Kino> list) {
|
||||
Map<String, KinoGroup> hashGroup = new HashMap<>();
|
||||
List<Kino> grouppedList = new ArrayList<>();
|
||||
|
||||
//TODO: необходима оптимизация
|
||||
Iterator<Kino> itr1 = list.iterator();
|
||||
int skip = 1;
|
||||
while (itr1.hasNext()) {
|
||||
Kino kino1 = itr1.next();
|
||||
String s1 = Tools.cleanString(kino1.getName().replaceAll("^\\[.+?\\] ",""));
|
||||
|
||||
if (hashGroup.containsKey(s1)) {
|
||||
skip++;
|
||||
continue;
|
||||
}
|
||||
|
||||
KinoGroup group = new KinoGroup(s1, null);
|
||||
|
||||
Iterator<Kino> itr2 = list.iterator();
|
||||
int val = 0;
|
||||
while (itr2.hasNext()) {
|
||||
if (val < skip) {
|
||||
val++;
|
||||
itr2.next();
|
||||
continue;
|
||||
}
|
||||
|
||||
Kino kino2 = itr2.next();
|
||||
String s2 = Tools.cleanString(kino2.getName().replaceAll("^\\[.+?\\] ",""));
|
||||
|
||||
int res = s1.compareTo(s2);
|
||||
if (res == 0) {
|
||||
if (!group.contains(kino2)) {
|
||||
group.add(kino2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (group.getKinolist().size() > 0) {
|
||||
group.add(kino1);
|
||||
hashGroup.put(s1, group);
|
||||
} else {
|
||||
grouppedList.add(kino1);
|
||||
}
|
||||
|
||||
skip++;
|
||||
}
|
||||
|
||||
grouppedList.addAll(0, hashGroup.values());
|
||||
return grouppedList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(String message, Throwable t) {
|
||||
super.log(message, t);
|
||||
|
||||
Reference in New Issue
Block a user