有没有一个很好的理由为什么Pair<L,R>Java中没有?这个C++构造的等价物是什么?我宁愿避免重新实现自己.
似乎1.6提供类似的东西(AbstractMap.SimpleEntry<K,V>),但这看起来很复杂.
我喜欢Java有一个Map,你可以在其中定义地图中每个条目的类型<String, Integer>.
我正在寻找的是一种集合,其中集合中的每个元素都是一对值.对中的每个值都可以有自己的类型(如上面的String和Integer示例),它是在声明时定义的.
该集合将保持其给定的顺序,并且不会将其中一个值视为唯一键(如在地图中).
基本上我希望能够定义类型的ARRAY <String,Integer>或任何其他2种类型.
我意识到我可以创建一个只有2个变量的类,但这看起来过于冗长.
我也意识到我可以使用2D数组,但由于我需要使用不同的类型,我必须使它们成为OBJECT数组,然后我必须一直投射.
我只需要在集合中存储对,所以每个条目只需要两个值.如果没有上课路线,这样的事情会存在吗?谢谢!
我正在玩Java SE 8中的惰性函数操作,我想要一个对/元组map的索引,然后基于第二个元素,最后只输出索引.i(i, value[i])filtervalue[i]
我是否仍然要忍受这个问题:Java中的C++ Pair <L,R>相当于什么?在lambdas和溪流的大胆新时代?
更新:我提供了一个相当简化的示例,其中有一个由@dkatzel提供的简洁解决方案,其中一个答案如下.但是,它没有概括.因此,让我添加一个更一般的例子:
package com.example.test;
import java.util.ArrayList;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
boolean [][] directed_acyclic_graph = new boolean[][]{
{false, true, false, true, false, true},
{false, false, false, true, false, true},
{false, false, false, true, false, true},
{false, false, false, false, false, true},
{false, false, false, false, false, true},
{false, false, false, false, false, false}
};
System.out.println(
IntStream.range(0, …Run Code Online (Sandbox Code Playgroud) 在Python中,该enumerate函数允许您迭代一系列(索引,值)对.例如:
>>> numbers = ["zero", "one", "two"]
>>> for i, s in enumerate(numbers):
... print i, s
...
0 zero
1 one
2 two
Run Code Online (Sandbox Code Playgroud)
有没有办法在Java中这样做?
我刚刚创建了一个类型安全的Java n-tuple.
我正在使用一些非传统的方法来实现类型安全(我只是为了好玩).
有人可以就改进它或一些可能的缺陷提供一些意见.
public class Tuple {
private Object[] arr;
private int size;
private static boolean TypeLock = false;
private static Object[] lastTuple = {1,1,1}; //default tuple type
private Tuple(Object ... c) {
// TODO Auto-generated constructor stub
size=c.length;
arr=c;
if(TypeLock)
{
if(c.length == lastTuple.length)
for(int i = 0; i<c.length; i++)
{
if(c[i].getClass() == lastTuple[i].getClass())
continue;
else
throw new RuntimeException("Type Locked");
}
else
throw new RuntimeException("Type Locked");
}
lastTuple = this.arr;
}
public static void setTypeLock(boolean typeLock) {
TypeLock …Run Code Online (Sandbox Code Playgroud) 我想HashMap只有一个键值对象.
我创建了以下内容HashMap:
HashMap <Integer,String>DocsCollection = new HashMap <Integer,String>();
Run Code Online (Sandbox Code Playgroud)
在HashMap中,我想只有一个条目/对象.密钥类型是Integer.值类型是String.
例如= <1,"foo.txt">
每当我在文件中找到特定单词时,我都希望这样
增加键中的计数器
在值中添加新文件
例如,比方说,我在一家搜索单词"你好" DocsCollection,我要存储单词"你好"一词频率的每一次出场并连接所有的新文件到以前的值.
<3, "foo.txt的,hello.txt的,的test.txt">
3意味着我在三个文件中找到了"Hello"这个词.
并且Value由找到单词的文件组成
如果我使用方法put,则会在HashMap密钥更改的原因中创建一个新条目.它不稳定.它以"1"开头,但是当我第二次找到该字时,键增加然后put方法插入一个带有新键的新条目但是我想只有一个条目并修改密钥.可以这样做吗?我怎样才能在HashMap中只有一个对象并且每次都修改密钥?
DocsCollection.put(2,"foo.txt,hello.txt");
Run Code Online (Sandbox Code Playgroud)
提前致谢
我正在将程序从C#转换为Java.在C#代码中,开发人员使用Tuple.我需要将这个C#代码翻译成Java代码.因此,Java是否具有与C#的元组等效的变量类型?
有没有一种简单的方法在java中创建一个2元素元组?我正在考虑创建一个类并将变量声明为final.这会有用吗?
可能重复:
Java是否需要元组?
Java是否支持三元组或至少对?Java是否支持元组?我试图找到一种方法来制作一个列表,使其具有一个三元组,其初始点为第一个,终点为终点,中间距离为.但是,我似乎无法找到任何相关信息.
我写了一个mergesort算法.当我运行以下测试时:
public static void main(String[] args){
Integer[] arr = {3,7,9,11,0,-5,2,5,8,8,1};
List<Integer> list = new ArrayList<>();
list.addAll(Arrays.asList(arr)); // asList() returns fixed size list, so can't pass to mergesort()
List<Integer> result = mergesort(list);
System.out.println(result);
}
Run Code Online (Sandbox Code Playgroud)
我知道[-5, 0, 1, 2, 3, 5, 7, 8, 8, 9, 11],这是正确的.但是,我知道mergesort是一个稳定的类型,所以我怎么能编写一个测试来证明这两个8是按照它们原来的顺序?
编辑:因为我使用了Integer类,而不是原始的int,我想我可以得到hashCode()自从Integer扩展基Object类.
但是,当我尝试
Integer[] arr = {3,7,9,11,0,-5,2,5,8,8,1};
System.out.println(arr[8].hashCode());
System.out.println(arr[9].hashCode());
Run Code Online (Sandbox Code Playgroud)
我只得到:
8
8
Run Code Online (Sandbox Code Playgroud) 抱歉愚蠢的问题......任何人都可以帮我从方法中返回两个变量(我在这里阅读 并尝试重新编码,但没有结果).
public class FileQualityChecker {
EnviroVars vars = new EnviroVars();
public int n = 0;
public int z = 0;
public int m = 0;
String stringStatus;
public void stringLenghtCheck(String pathToCheckedFile)
{
try{
FileInputStream fstream = new FileInputStream(pathToCheckedFile+"\\"+"Test.dat");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null)
{
if (
strLine.length() == vars.strLenghtH ||
strLine.length() == …Run Code Online (Sandbox Code Playgroud)