Java-根据后缀从列表创建子列表
我正试图从基于后缀的列表中创建子列表Java-根据后缀从列表创建子列表,java,arraylist,collections,iterator,sublist,Java,Arraylist,Collections,Iterator,Sublist,我正试图从基于后缀的列表中创建子列表 public class Test { public static void main(String args[]) { List<List<String>> subList = new ArrayList<List<String>>(); List<String> myList = new ArrayList<String>();
public class Test {
public static void main(String args[]) {
List<List<String>> subList = new ArrayList<List<String>>();
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
for (String item : myList) {
List<String> tempList = new ArrayList<String>();
String suffix = item.substring(item.lastIndexOf("_"));
tempList.add(item);
for (String value : myList) {
if (value.endsWith(suffix) && !tempList.contains(value)) {
tempList.add(value);
}
}
System.out.println(tempList);
}
}
}
但实际情况是
[Text_1, ABC_1, XYZ_1]
[XYZ_3, Text_3]
[ABC_1, Text_1, XYZ_1]
[Text_2, XYZ_2, ABC_2]
[Text_3, XYZ_3]
[XYZ_1, Text_1, ABC_1]
[XYZ_2, Text_2, ABC_2]
[ABC_2, Text_2, XYZ_2]
感谢您的帮助。谢谢您的代码有几个问题: 1) 您在每个项目上都构建了模板列表,因此虽然结果是正确的,但您将在myList中的每个项目上看到它们。你需要“记住”你处理的每个后缀,这样你就不会再处理它了。一个
HashMap
将完成这项工作
2) 如果希望tempList具有uniqe值,请使用Set
这是完整的解决方案
public static void main(String args[]) {
Map<String, Set<String>> subList = new HashMap<>();
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
for (String item : myList) {
String suffix = item.substring(item.lastIndexOf("_"));
if (subList.containsKey(suffix)) continue;
Set<String> tempSet = new HashSet<String>();
tempSet.add(item);
for (String value : myList) {
if (value.endsWith(suffix)) {
tempSet.add(value);
}
}
subList.put(suffix, tempSet);
}
System.out.println(subList);
}
问题是@sharonbn,但您也可以在每次获得后缀时更新该值
List<List<String>> subList = new ArrayList<List<String>>();
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
for (int i = 0; i < myList.size(); i++) {
String item = myList.get(i);
List<String> tempList = new ArrayList<String>();
int location = item.lastIndexOf("_");
if (location < 0) continue;
String suffix = item.substring(location);
tempList.add(item);
for (int j = i + 1; j < myList.size(); j++) {
String value = myList.get(j);
if (value.endsWith(suffix) && !tempList.contains(value)) {
tempList.add(value);
myList.set(j, "-------");
}
}
System.out.println(tempList);
}
List subList=new ArrayList();
List myList=new ArrayList();
myList.add(“文本1”);
myList.add(“XYZ_3”);
myList.add(“ABC_1”);
myList.add(“Text_2”);
myList.add(“Text_3”);
myList.add(“XYZ_1”);
myList.add(“XYZ_2”);
myList.add(“ABC_2”);
对于(int i=0;i
是否尝试使用
可以使用列表添加可见后缀。如果此列表包含后缀,则不执行任何操作
List<String> seenSuffixes = new ArrayList<String>();
for (String item : myList) {
String suffix = item.substring(item.lastIndexOf("_"));
if(!seenSuffixes.contains(suffix)){
seenSuffixes.add(suffix);
List<String> tempList = new ArrayList<String>();
tempList.add(item);
for (String value : myList) {
if (value.endsWith(suffix) && !tempList.contains(value)) {
tempList.add(value);
}
}
System.out.println(tempList);
}
}
List seenSuffixes=newarraylist();
用于(字符串项:myList){
字符串后缀=item.substring(item.lastIndexOf(“”);
如果(!seenSuffixes.contains(后缀)){
请参见后缀。添加(后缀);
List templast=new ArrayList();
圣堂武士。添加(物品);
for(字符串值:myList){
if(value.endsWith(后缀)&&!templast.contains(value)){
圣殿骑士。增加(价值);
}
}
System.out.println(圣殿骑士);
}
}
看看这个,我使用一个带有后缀值的映射作为键,一个普通类型列表作为值
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
Map<String, List<String>> map=new HashMap<String,List<String>>();
for(String str:myList){
String[] arryStr=str.split("_");
if(! map.containsKey(arryStr[1])){
List<String> tmpList=new ArrayList<String>();
tmpList.add(str);
map.put(arryStr[1],tmpList);
}else{
List<String> existingList=map.get(arryStr[1]);
existingList.add(str);
}
}
List myList=new ArrayList();
myList.add(“文本1”);
myList.add(“XYZ_3”);
myList.add(“ABC_1”);
myList.add(“Text_2”);
myList.add(“Text_3”);
myList.add(“XYZ_1”);
myList.add(“XYZ_2”);
myList.add(“ABC_2”);
Map Map=newhashmap();
for(字符串str:myList){
字符串[]arryStr=str.split(“”);
if(!map.containsKey(arryStr[1])){
List tmpList=new ArrayList();
tmpList.add(str);
map.put(arryStr[1],tmpList);
}否则{
List existingList=map.get(arryStr[1]);
现有列表。添加(str);
}
}
每次迭代都要创建一个新的ArrayList
对象。我想将所有分组项都放在tempList中。你认为这有什么问题吗?
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
public class QuickTester {
public static void main(String[] args) {
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
TreeMap <String, ArrayList<String>> map = new TreeMap<>();
for (String item : myList) {
// contents[0] is value, contents[1] is suffix
String [] contents = item.split("_");
if(!map.containsKey(contents[1])) {
ArrayList<String> values = new ArrayList<>();
values.add(contents[0]);
map.put(contents[1], values);
}
else {
map.get(contents[1]).add(contents[0]);
}
}
for(String key : map.keySet()) {
System.out.println("Key: " + key);
System.out.print("Values: ");
for(String value : map.get(key)) {
System.out.print(value + " ");
}
System.out.println();
}
}
}
Key: 1
Values: Text ABC XYZ
Key: 2
Values: Text XYZ ABC
Key: 3
Values: XYZ Text
List<String> seenSuffixes = new ArrayList<String>();
for (String item : myList) {
String suffix = item.substring(item.lastIndexOf("_"));
if(!seenSuffixes.contains(suffix)){
seenSuffixes.add(suffix);
List<String> tempList = new ArrayList<String>();
tempList.add(item);
for (String value : myList) {
if (value.endsWith(suffix) && !tempList.contains(value)) {
tempList.add(value);
}
}
System.out.println(tempList);
}
}
List<String> myList = new ArrayList<String>();
myList.add("Text_1");
myList.add("XYZ_3");
myList.add("ABC_1");
myList.add("Text_2");
myList.add("Text_3");
myList.add("XYZ_1");
myList.add("XYZ_2");
myList.add("ABC_2");
Map<String, List<String>> map=new HashMap<String,List<String>>();
for(String str:myList){
String[] arryStr=str.split("_");
if(! map.containsKey(arryStr[1])){
List<String> tmpList=new ArrayList<String>();
tmpList.add(str);
map.put(arryStr[1],tmpList);
}else{
List<String> existingList=map.get(arryStr[1]);
existingList.add(str);
}
}