考虑以下代码:
final Set<String> allPaths = new HashSet<String>();
for (final String path: paths) {
allPaths.add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
MyData
是我不应该接触的课程。它应该以{{1}}作为参数。在这一天之前,我们之所以使用这种方式,是因为我们不在乎顺序,这就是为什么我们使用ArrayList
(因此不会重复)的原因。但是现在,我想保留元素的顺序,因此在进行了一些研究之后,我发现可以使用数据结构Set
来做到这一点。所以我做到了:
LinkedHashSet
问题是,我不确定如何将final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
final MyData d = new MyData(new ArrayList<String>(allPaths));
转换为LinkedHashSet
。另外,我想到了使用ArrayList
而不是ArrayList
,所以我不必转换它,但是我必须遍历数组(LinkedHashSet
)。
我应该使用哪种良好,清洁和有效的方式?
答案 0 :(得分:3)
只需在arrayList上使用public boolean addAll(Collection<? extends E> c)
方法,它就可以接受任何Collection
。
您有LinkedHashSet
:
final LinkedHashSet<String> allPaths = new LinkedHashSet<String>();
for (final String path: paths) {
allPaths .add(path);
}
然后执行(即使mylist
不为空也可以使用):
List<String> myList = new ArrayList<>();
mylist.addAll(allPaths);
或更简单的方法:
List<String> myList = new ArrayList<>(allPaths);
答案 1 :(得分:2)
为什么不像这样将midnight = (int(time.time() // 86400)) * 86400 - 86400
转换为paths
(假设LinkedHashSet
是一个集合?
paths
如果final MyData d = new MyData(new ArrayList<>(new LinkedHashSet<>(paths)));
是一个数组,则可以在上面的转换中使用paths
答案 2 :(得分:0)
@TTaJTa4 you can use the code below as an example. Both ways are fine.
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;
public class ConvertLinkedHashSetToArrayList
{
public static void main(String[] args)
{
Set<String> testStrings = new LinkedHashSet<>();
testStrings.add("String 1");
testStrings.add("String 2");
testStrings.add("String 3");
testStrings.add("String 4");
testStrings.add("String 5");
System.out.println("** Printing LinkedHashSet: " + testStrings);
ArrayList<String> linkedHashSetToArrayList1 = new ArrayList<>(testStrings);
System.out.println("** Printing linkedHashSetToArrayList1:" +
linkedHashSetToArrayList1);
ArrayList<String> linkedHashSetToArrayList2 = new ArrayList<>();
linkedHashSetToArrayList2.addAll(testStrings);
System.out.println("** Printing linkedHashSetToArrayList2:" +
linkedHashSetToArrayList2);
}
}
结果如下:
** Printing LinkedHashSet: [String 1, String 2, String 3, String 4, String 5]
** Printing linkedHashSetToArrayList1:[String 1, String 2, String 3, String 4, String 5]
** Printing linkedHashSetToArrayList2:[String 1, String 2, String 3, String 4, String 5]
按照GitHub链接获取完整的Java项目: GitHub example
答案 3 :(得分:0)
如果paths
是一个集合,则可以获取没有重复的数组列表:
ArrayList<String> p = paths.stream().distinct().collect(Collectors.toCollection(ArrayList::new));
如果paths
是一个数组:
ArrayList<String> p = Stream.of(paths).distinct().collect(Collectors.toCollection(ArrayList::new));