0

группировка одинаковых наименований

This commit is contained in:
2016-03-23 14:58:18 +03:00
parent 6e1129bf88
commit a143dd3a27
4 changed files with 100 additions and 3 deletions

View 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);
}
}

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -4,7 +4,18 @@
<#if resultsearch?has_content>
<ul class="resultlist">
<#list resultsearch as kino>
<li><a href="${kino.url}" target="_blank">${kino.name}</a></li>
<li>
<#if kino.getClass().getSimpleName() == "KinoGroup">
<b>${kino.name}</b>
<ul>
<#list kino.kinolist as kino_groupped>
<li><a href="${kino_groupped.url}" target="_blank">${kino_groupped.name}</a></li>
</#list>
</ul>
<#else>
<a href="${kino.url}" target="_blank">${kino.name}</a>
</#if>
</li>
</#list>
</ul>
<#else>