-1

I have a JSON Array string like [1,2].I want to convert this in to Set.How can I do it in java 8 ?

This is my code

String languageStr = rs.getString("languages");
jobseeker.setLanguageIds(StringUtils.isEmpty(languageStr) ? null
                    : Arrays.stream(languageStr.split(","))
                    .map(Integer::parseInt)
                    .collect(Collectors.toSet()));

Getting error like this

java.lang.NumberFormatException: For input string: " 2"

The space in json array is the problem.Is there any solution?

This is my code after changes

 String languageStr = rs.getString("languages");
            String languages=languageStr.substring(1,languageStr.length()-1);
            jobseeker.setLanguageIds(StringUtils.isEmpty(languages) ? null
                    : Arrays.stream(languages.split(","))
                    .map(String::trim)
                    .map(Integer::parseInt)
                    .collect(Collectors.toSet()));

Can I get the output in any other way withot using these 2 steps: languages=languageStr.substring(1,languageStr.length()-1);

.map(String::trim)

Supriya C S
  • 135
  • 3
  • 14

3 Answers3

0

You can use the trim method to remove leading and trailing withespace before parse it to Integer.

So your code will be this

 Arrays.stream(languageStr.split(","))
                .map(String::trim)
                .map(Integer::parseInt)
0

Finally I got the solution

Changed code like this:

String languageStr = rs.getString("languages");

Set<Integer> languages = mapper.readValue(languageStr,    typeFactory.constructCollectionType(Set.class, Integer.class));

jobseeker.setLanguageIds(StringUtils.isEmpty(languageStr) ? null  : languages);
Supriya C S
  • 135
  • 3
  • 14
0

Using a TypeToken and the Google Gson library, you should be able to do that like below:

String languageJsonStr = rs.getString("languages");    
Set<Integer> myLanguageSet = new Gson().fromJson(languageJsonStr, new TypeToken<HashSet<Integer>>(){}.getType());
ngaspama
  • 371
  • 4
  • 10