Java 将CSV列表转换为设置<;长期>;如果没有重复项,则忽略空值

Java 将CSV列表转换为设置<;长期>;如果没有重复项,则忽略空值,java,Java,我想将字符串中由逗号分隔的数字列表转换为java中的集合,忽略空条目和重复项。分隔符可以是任何字符串,不仅仅是逗号,但为了简单起见,我在这里使用逗号 e、 g Java 8解决方案如下所示: import java.util.stream.Collectors; import java.util.Arrays; import java.util.Set; String csv = "1,2,3,4,,2"; Set<Long> set = Arrays.asList(csv.spl

我想将字符串中由逗号分隔的数字列表转换为java中的
集合
,忽略空条目和重复项。分隔符可以是任何字符串,不仅仅是逗号,但为了简单起见,我在这里使用逗号

e、 g


Java 8解决方案如下所示:

import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.Set;

String csv = "1,2,3,4,,2";
Set<Long> set = Arrays.asList(csv.split(","))
        .stream()
        .map(String::trim)
        .filter(x -> x.length() > 0)
        .map(Long::parseLong)
        .collect(Collectors.toSet());
import java.util.stream.collector;
导入java.util.array;
导入java.util.Set;
字符串csv=“1,2,3,4,2”;
Set=Arrays.asList(csv.split(“,”))
.stream()
.map(字符串::trim)
.filter(x->x.length()>0)
.map(Long::parseLong)
.collect(收集器.toSet());

另一种方法是在一个
for循环中使用一个
if语句
(如果用户不想使用
或利用Java 8新功能):

使用扫描仪

    String csv = "1,2,3,4,,2";
    Set<Long> set = new HashSet<>();
    try (Scanner sc = new Scanner(csv)) {
        sc.useDelimiter(",");
        while (sc.hasNext()) {
            String next = sc.next();
            if (!next.equals("")) {
                set.add(Long.parseLong(next));
            }
        }
    }
    System.out.println(set);
String csv=“1,2,3,4,2”;
Set=newhashset();
尝试(扫描仪sc=新扫描仪(csv)){
sc.useDelimiter(“,”);
while(sc.hasNext()){
字符串next=sc.next();
如果(!next.equals(“”){
set.add(Long.parseLong(next));
}
}
}
系统输出打印项次(套);

可以使用
Arrays.stream(csv.split(\\D+”)
来避免创建列表和过滤空字符串。修剪不是必需的,但是您可能需要使用
split(“,”,-1)
。在过滤器中,您可以创建一个谓词
谓词emptyString=String::isEmpty并在上使用
emptyString.negate()
it@ViktorMellgren-感谢您的反馈-但如果有多个空格的空条目,例如“1、、2”,则需要进行修剪。至少看起来是这样,因为我试图拆除饰件和/或过滤器,但都失败了。
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.Set;

String csv = "1,2,3,4,,2";
Set<Long> set = Arrays.asList(csv.split(","))
        .stream()
        .map(String::trim)
        .filter(x -> x.length() > 0)
        .map(Long::parseLong)
        .collect(Collectors.toSet());
import java.util.HashSet;
import java.util.Set;

public class ConvertCSVToSETLong {

    public static void main(String[] args){
        // different numbers of commas
        String csv = "1,,,,2,3,,,,4,,,,2,,5,,6,7,1"; 
        Set<Long> set = new HashSet<Long>();

        for(String s : csv.split(",")){
            if(!s.trim().isEmpty()){
              set.add(Long.parseLong(s));
            }
        }

        System.out.println(set); // test
    }
}
[1, 2, 3, 4, 5, 6, 7]
    String csv = "1,2,3,4,,2";
    Set<Long> set = new HashSet<>();
    try (Scanner sc = new Scanner(csv)) {
        sc.useDelimiter(",");
        while (sc.hasNext()) {
            String next = sc.next();
            if (!next.equals("")) {
                set.add(Long.parseLong(next));
            }
        }
    }
    System.out.println(set);