группировка одинаковых наименований
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) {
|
public static Pattern getStrongPattern(String name) {
|
||||||
return Pattern.compile("(^"+name+"[\\s:])|(\\s"+name+"[\\s:])|(\\s"+name+"$)|(^"+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;
|
package kinosearch.webapp.servlets;
|
||||||
|
|
||||||
import kinosearch.core.Kino;
|
import kinosearch.core.Kino;
|
||||||
|
import kinosearch.core.KinoGroup;
|
||||||
import kinosearch.core.Tools;
|
import kinosearch.core.Tools;
|
||||||
import kinosearch.webapp.WebApp;
|
import kinosearch.webapp.WebApp;
|
||||||
import kinosearch.webapp.template.TemplateProcessor;
|
import kinosearch.webapp.template.TemplateProcessor;
|
||||||
import kinosearch.core.warez.KinoWarez;
|
import kinosearch.core.warez.KinoWarez;
|
||||||
import kinosearch.core.warez.Onlinelife;
|
|
||||||
|
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
@@ -64,10 +64,62 @@ public class IndexServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
model.put("searchtext", search);
|
model.put("searchtext", search);
|
||||||
model.put("resultsearch", list);
|
model.put("resultsearch", groupKino(list));
|
||||||
model.put("strong", strong);
|
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
|
@Override
|
||||||
public void log(String message, Throwable t) {
|
public void log(String message, Throwable t) {
|
||||||
super.log(message, t);
|
super.log(message, t);
|
||||||
|
|||||||
@@ -4,7 +4,18 @@
|
|||||||
<#if resultsearch?has_content>
|
<#if resultsearch?has_content>
|
||||||
<ul class="resultlist">
|
<ul class="resultlist">
|
||||||
<#list resultsearch as kino>
|
<#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>
|
</#list>
|
||||||
</ul>
|
</ul>
|
||||||
<#else>
|
<#else>
|
||||||
|
|||||||
Reference in New Issue
Block a user