разбить список на подсписки и передать их один за другим в алгоритм - PullRequest
1 голос
/ 13 мая 2019

У меня есть список строк типа, который содержит несколько элементов в форме

[Cid:0001,Jid:439,java,unit testing]
[Cid:0001,Jid:439,java,jsp,xml,javascript,servlet,html]
[Cid:0001,Jid:245,ui development,jquery,javascript,html,ajax]
[Cid:0002,Jid:312,team,goals,territory]

и т. Д.

Поскольку существует много элементов, мне нужно сгруппировать элементы на основена Сиде и Джиде.Пример. Первые две строки выше должны быть одной группой, так как она имеет одинаковые Cid и Jid.

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

List<List<String>> mainList = new ArrayList<>();
for (Resume r : resumes) {
  List<String> subList = new ArrayList<>();
  for (String temp : hashSet) {
    if (temp.equalsIgnoreCase(r.getJid() + r.getCid())) { 
      subList.add(r.toString());
      mainList.add(subList);

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Я использовал Regex в списке строк, которые вы упомянули в верхней части, дайте мне знать, если это работает для вас

   public static void main(String[] args)  {
        List<String> list = new ArrayList<String>();
        list.add("[Cid:0001,Jid:439,java,unit testing]"); 
        list.add("[Cid:0001,Jid:439,java,jsp,xml,javascript,servlet,html]");
        list.add("[Cid:0001,Jid:245,ui development,jquery,javascript,html,ajax]"); 
        list.add("[Cid:0002,Jid:312,team,goals,territory]");

        Map<String, String> map = new HashMap<String, String>();

        final Pattern patternId = Pattern.compile("Cid:\\d*,Jid:\\d*,", Pattern.MULTILINE);//to get Id combo
        for(int i=0; i<list.size(); i++) {
            Matcher matcher = patternId.matcher(list.get(i));
            String cIdJid = null;
            if(matcher.find()) {
                cIdJid = matcher.group(0);
            }
            if(map.containsKey(cIdJid)) {
                map.put(cIdJid, map.get(cIdJid)+","+list.get(i));
            }else {
                map.put(cIdJid, list.get(i));
            }           
        }
        Collection<String> collection = map.values();
        for (String value : collection) {
            if(value.contains("],[")) {
                System.out.println("["+value+"]");
            }else {
                System.out.println(value);
            }       
        }
    }

выход

[[Cid:0001,Jid:439,java,unit testing],[Cid:0001,Jid:439,java,jsp,xml,javascript,servlet,html]]
[Cid:0002,Jid:312,team,goals,territory]
[Cid:0001,Jid:245,ui development,jquery,javascript,html,ajax]
0 голосов
/ 13 мая 2019

Вот мой фрагмент кода:




        Resume r1 = new Resume();
        r1.setJid("123");
        r1.setCid("2900");
        r1.setRes("java,unit testing");

        Resume r2 = new Resume();
        r2.setJid("1232");
        r2.setCid("900");
        r2.setRes("java,jsp,xml,javascript,servlet,html");

        Resume r3 = new Resume();
        r3.setJid("123");
        r3.setCid("2900");
        r3.setRes("ui development,jquery,javascript,html,ajax");

        List<Resume> resumes = new ArrayList<Resume>();
        resumes.add(r1);
        resumes.add(r2);
        resumes.add(r3);
        Map<String, String> map = new HashMap<String, String>();
        for (Resume r : resumes) {
            StringBuilder subList = new StringBuilder();
            subList.append("\""+r.toString()+"\"");
            if (map.containsKey("JID:" + r.getJid()+"+" + "CID:" + r.getCid())) {
                subList.append(","+map.get("JID:" + r.getJid()+"+" + "CID:" + r.getCid()));
            }
            map.put("JID:" + r.getJid()+"+" + "CID:" + r.getCid(),subList.toString());

        }

        for(String key:map.keySet()) {
            System.out.println("{"+key+map.get(key)+"}");
        }


Выход:

{JID:123+CID:2900"ui development,jquery,javascript,html,ajax","java,unit testing"}
{JID:1232+CID:900"java,jsp,xml,javascript,servlet,html"}

Я использовал "JID"+r.getJid()+"CID"+r.getCid(), чтобы рассмотреть случай, когда

JId: 212 и Cid: 456

JId: 2124 и Cid: 56

Поскольку они не должны быть сгруппированы вместе. Добавление ключа как r.getJid() + r.getCid() не поможет вам рассмотреть этот случай

...