java 嵌套循环删除元素,根据Java中的第一个迭代变量对嵌套循环元素进行分组

I have 2 lists one for the sentence one for the keywords. The idea is to check if the sentence have the keywords. and put them in a list for each sentence in order.

I am sorry if this is already duplicated here in advance.

List sentence= new ArrayList <>();

sentence.add("this is a good dog");

sentence.add("cats drink milk");

sentence.add("Animals are beautiful creatures");

List keyword= new ArrayList <>();

keyword.add("dog");

keyword.add("cats");

keyword.add("beautiful");

keyword.add("good");

keyword.add("are");

keyword.add("this");

keyword.add("milk");

My idea was to create 2 nested loops for each list:

for (int b = 0; b < sentence.size(); b++) {

for (int c = 0; c < keyword.size(); c++) {

if (sentence.get(b).contains(keyword.get(c))) {

System.out.println(keyword.get(c));

}

}

}

The output of this is:

dog

good

this

cats

milk

beautiful

are

The desired output would be:

[this,good,dog]

[cats,milk]

[are,beautiful]

So it is like getting all the existing keywords, in the order of the sentence,not related to keywords order.

and then group the existing keywords for each sentence, as in the order of existence.

Hope it is clear. Would really appreciate any ideas. doesnt have to follow the same method.

解决方案

Iterate over your sentence list. For each sentence iterate over your keyword list. Add each found keyword found in a tempList, sort the tempList by the index of keyword in sentence and finally add each tempList to a list of lists. Example:

public static void main(String[] args) {

List sentence= new ArrayList <>();

sentence.add("this is a good dog");

sentence.add("cats drink milk");

sentence.add("Animals are beautiful creatures");

List keyword= new ArrayList <>();

keyword.add("dog");

keyword.add("cats");

keyword.add("beautiful");

keyword.add("good");

keyword.add("are");

keyword.add("this");

keyword.add("milk");

List> result = new LinkedList<>();

for(String sen: sentence){

List tempList = new ArrayList<>();

for(String key: keyword){

if(sen.contains(key)){

tempList.add(key);

}

}

tempList.sort(new Comparator() {

@Override

public int compare(String o1, String o2) {

return sen.indexOf(o1) - sen.indexOf(o2) ;

}

});

result.add(tempList);

}

for(List r : result){

System.out.println(r);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值